[in, out, string] Prototype

The following function prototype uses a single [in, out, string] parameter for both the input and output strings. The string first contains patient input and is then overwritten with the doctor response as shown:

void Analyze([in, out, string, size_is(STRSIZE)] char  achInOut[]);

This example is similar to the one that employed a single-counted string for both input and output. As with that example, the [size_is] attribute determines the number of elements allocated on the server. The [string] attribute directs the stub to call strlen to determine the number of transmitted elements.

The client allocates all memory before the call as:

/* client */
char achInOut[STRSIZE];
...
gets_s(achInOut, STRSIZE);            // get patient input
Analyze(achInOut);
printf("%s\n", achInOut);  // display doctor response

Note that the Analyze function no longer must calculate the length of the return string as it did in the counted-string example where the [string] attribute was not used. Now the stubs calculate the length as shown:

/* server */
void Analyze(char *pchInOut)
{
   ...
   Respond(response, pchInOut); // don't need to call strlen
   return;                      // stubs handle size
}