0

如果 sprintf 在本地缓冲区中写入,我可以在可重入函数中使用它吗?像这样的东西:

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

3 回答 3

4

我进入这个页面是因为我也在问同样的问题。以下是我从书中读到的内容:

UNIX 环境中的高级编程:第二版

第 10.6 节

大多数不在图 10.4中的函数(可重入函数列表)都丢失了,因为 (a) 它们已知使用静态数据结构,(b) 它们调用 malloc 或 free,或者 (c) 它们是标准 I的一部分/O 库

Linux 编程接口

第 21.1.2 章

如果函数使用静态数据结构进行内部簿记,它们也可以是不可重入的。此类函数最明显的示例是stdio 库的成员(printf()、scanf() 等),它们更新缓冲 I/O 的内部数据结构。

我想这取决于实施。这还取决于您实际上如何使用 snprintf (缓冲区是必不可少的)。对这个问题最安全的回答应该是“不”。

于 2011-10-07T09:02:01.957 回答
2

是的。

为什么你认为你不能?没有全球性的。

想到一件事:缓冲区是函数的本地缓冲区,为什么要格式化字符串却什么也不做呢?

于 2011-01-05T09:40:33.310 回答
2

当然可以,除非你bufferstatic.

于 2011-01-05T09:40:58.317 回答