如果在本地缓冲区中写入,我可以在可重入函数中使用sprintf吗?像这样:
void reentrant_function () {
int i = 4;
char buffer[20];
snprintf(buffer, 20, "%d", i);
}
答案 0 :(得分:4)
我到了这个页面,因为我也问了同样的问题。以下是我从书中读到的内容:
UNIX环境中的高级编程:第二版
第10.6节
图10.4 (可重入函数列表)中缺少的大多数函数都会丢失,因为(a)已知它们使用静态数据结构,(b)它们调用malloc或free,或者(c)它们是标准I / O库的一部分。
Linux编程接口
第21.1.2节
如果函数使用静态数据结构,则函数也可以是非重入的 内部簿记。这些功能最明显的例子是成员 stdio库(printf(),scanf()等),用于更新内部数据 缓冲I / O的结构。
我想这是实施依赖。它还取决于你如何实际使用snprintf(缓冲区是必不可少的)。对这个问题最安全的答案应该是'不'。
答案 1 :(得分:2)
是
为什么你认为你不能?没有全球性的。
有一点想法:缓冲区是函数的本地,为什么要格式化字符串而不对它做什么?
答案 2 :(得分:2)
当然可以,除非您的buffer
是static
。