次の関数プロトタイプでは、入力文字列と出力文字列の両方に 1 つの [、 文字列] パラメーターを使用します。 文字列には最初に患者の入力が含まれており、次に示すように医師の応答で上書きされます。
void Analyze([in, out, string, size_is(STRSIZE)] char achInOut[]);
この例は、入力と出力の両方に単一カウント文字列を使用した例と似ています。 この例と同様に、[size_is] 属性は、サーバーに割り当てられている要素の数を決定します。 [文字列] 属性は、スタブ strlen を呼び出して、送信される要素の数を決定するように指示します。
クライアントは、呼び出しの前にすべてのメモリを次のように割り当てます。
/* client */
char achInOut[STRSIZE];
...
gets_s(achInOut, STRSIZE); // get patient input
Analyze(achInOut);
printf("%s\n", achInOut); // display doctor response
Analyze 関数では、[string] 属性が使用されていない counted 文字列の例のように、戻り文字列の長さを計算する必要はなくなりました。 次に示すように、スタブによって長さが計算されます。
/* server */
void Analyze(char *pchInOut)
{
...
Respond(response, pchInOut); // don't need to call strlen
return; // stubs handle size
}