glibc sprintf可以用于折返函数吗?

时间:2011-01-05 09:36:42

标签: c++ c linux glibc reentrancy

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

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

3 个答案:

答案 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)

当然可以,除非您的bufferstatic