0

ローカルバッファに書き込む場合、リエントラント関数でsprintfを使用できますか?このようなもの:

void reentrant_function () { 
    int i = 4;
    char buffer[20];
    snprintf(buffer, 20, "%d", i); 
}
4

3 に答える 3

4

私も同じ質問をしているので、このページにアクセスします。これが私が本から読んだものです:

UNIX環境での高度なプログラミング:第2版

セクション10.6

図10.4 (リエントラント関数のリスト)にないほとんどの関数は、(a)静的データ構造を使用することがわかっている、(b)mallocまたはfreeを呼び出す、または(c)標準Iの一部であるために欠落しています。 /Oライブラリ

Linuxプログラミングインターフェイス

21.1.2章

内部の簿記に静的データ構造を使用している場合、関数は再入可能ではない可能性もあります。このような関数の最も明白な例は、バッファリングされたI / Oの内部データ構造を更新するstdioライブラリのメンバー(printf()、scanf()など)です。

実装次第だと思います。また、実際にsnprintfをどのように使用するかによっても異なります(バッファーは必須です)。質問に対する最も安全な答えは「いいえ」である必要があります。

于 2011-10-07T09:02:01.957 に答える
2

はい。

なぜできなかったと思いますか?グローバルはありません。

考えられることの1つは、バッファーが関数に対してローカルであるのに、なぜ文字列をフォーマットして何もしないのでしょうか。

于 2011-01-05T09:40:33.310 に答える
2

確かに、あなたがそうでない限り、あなたbufferはそうすることができますstatic

于 2011-01-05T09:40:58.317 に答える