Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Poniższy prototyp funkcji używa pojedynczego parametru [w, ciągu] zarówno dla ciągów wejściowych, jak i wyjściowych. Ciąg najpierw zawiera dane wejściowe pacjenta, a następnie jest zastępowany odpowiedzią lekarza, jak pokazano poniżej:
void Analyze([in, out, string, size_is(STRSIZE)] char achInOut[]);
Ten przykład jest podobny do tego, który zastosował jednolicie zliczany ciąg zarówno dla danych wejściowych, jak i wyjściowych. Podobnie jak w tym przykładzie, atrybut [size_is] określa liczbę elementów przydzielonych na serwerze. Atrybut [string] kieruje wycinkę w celu wywołania strlen w celu określenia liczby przesłanych elementów.
Klient przydziela całą pamięć przed wywołaniem jako:
/* client */
char achInOut[STRSIZE];
...
gets_s(achInOut, STRSIZE); // get patient input
Analyze(achInOut);
printf("%s\n", achInOut); // display doctor response
Należy pamiętać, że funkcja Analyze nie musi już obliczyć długości ciągu zwracanego, jak to miało miejsce w przykładzie zliczonym ciągu, w którym atrybut [ciąg] nie był używany. Teraz wycinki obliczają długość, jak pokazano poniżej:
/* server */
void Analyze(char *pchInOut)
{
...
Respond(response, pchInOut); // don't need to call strlen
return; // stubs handle size
}