ローカルバッファに書き込む場合、リエントラント関数でsprintfを使用できますか?このようなもの:
void reentrant_function () {
int i = 4;
char buffer[20];
snprintf(buffer, 20, "%d", i);
}
ローカルバッファに書き込む場合、リエントラント関数でsprintfを使用できますか?このようなもの:
void reentrant_function () {
int i = 4;
char buffer[20];
snprintf(buffer, 20, "%d", i);
}
私も同じ質問をしているので、このページにアクセスします。これが私が本から読んだものです:
UNIX環境での高度なプログラミング:第2版
セクション10.6
図10.4 (リエントラント関数のリスト)にないほとんどの関数は、(a)静的データ構造を使用することがわかっている、(b)mallocまたはfreeを呼び出す、または(c)標準Iの一部であるために欠落しています。 /Oライブラリ。
Linuxプログラミングインターフェイス
21.1.2章
内部の簿記に静的データ構造を使用している場合、関数は再入可能ではない可能性もあります。このような関数の最も明白な例は、バッファリングされたI / Oの内部データ構造を更新するstdioライブラリのメンバー(printf()、scanf()など)です。
実装次第だと思います。また、実際にsnprintfをどのように使用するかによっても異なります(バッファーは必須です)。質問に対する最も安全な答えは「いいえ」である必要があります。
はい。
なぜできなかったと思いますか?グローバルはありません。
考えられることの1つは、バッファーが関数に対してローカルであるのに、なぜ文字列をフォーマットして何もしないのでしょうか。
確かに、あなたがそうでない限り、あなたbuffer
はそうすることができますstatic
。