如果 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 环境中的高级编程:第二版
第 10.6 节
大多数不在图 10.4中的函数(可重入函数列表)都丢失了,因为 (a) 它们已知使用静态数据结构,(b) 它们调用 malloc 或 free,或者 (c) 它们是标准 I的一部分/O 库。
Linux 编程接口
第 21.1.2 章
如果函数使用静态数据结构进行内部簿记,它们也可以是不可重入的。此类函数最明显的示例是stdio 库的成员(printf()、scanf() 等),它们更新缓冲 I/O 的内部数据结构。
我想这取决于实施。这还取决于您实际上如何使用 snprintf (缓冲区是必不可少的)。对这个问题最安全的回答应该是“不”。
是的。
为什么你认为你不能?没有全球性的。
想到一件事:缓冲区是函数的本地缓冲区,为什么要格式化字符串却什么也不做呢?
当然可以,除非你buffer
是static
.