[in, out, string] Prototip

Aşağıdaki işlev prototipi, hem giriş hem de çıkış dizeleri içindize] parametresiniiçinde tek bir [kullanır. Dize ilk olarak hasta girişini içerir ve daha sonra gösterildiği gibi doktor yanıtıyla üzerine yazılır:

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

Bu örnek, hem giriş hem de çıkış için tek sayılmış bir dize kullanana benzer. Bu örnekte olduğu gibi , [size_is] özniteliği sunucuda ayrılan öğelerin sayısını belirler. [string] özniteliği, iletilen öğelerin sayısını belirlemek için saplamayı strlen çağırmaya yönlendirir.

İstemci, çağrıdan önce tüm belleği şu şekilde ayırır:

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

Analyze işlevinin artık [string] özniteliğinin kullanılmadığı sayılan dize örneğinde olduğu gibi dönüş dizesinin uzunluğunu hesaplaması gerekmediğini unutmayın. Şimdi saplamalar uzunluğu gösterildiği gibi hesaplar:

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