glibc sprintf 可以在可重入函数中使用吗?
如果 sprintf 在本地缓冲区中写入,我可以在可重入函数中使用它吗?像这样的事情:
void reentrant_function () {
int i = 4;
char buffer[20];
snprintf(buffer, 20, "%d", i);
}
Can I use sprintf in a reentrant function if it writes in a local buffer? Something like this:
void reentrant_function () {
int i = 4;
char buffer[20];
snprintf(buffer, 20, "%d", i);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我进入此页面是因为我也在问同样的问题。以下是我从书中读到的内容:
UNIX 环境中的高级编程:第二版
Linux 编程接口
我想这取决于实施。这还取决于您实际如何使用 snprintf(缓冲区是必不可少的)。这个问题最安全的答案应该是“不”。
I get to this page because I am also asking the same question. Here is what I read from books:
Advanced Programming in the UNIX Environment: Second Edition
The Linux Programming Interface
I guess it is implementation depending. It also depends on how do you use snprintf actually (the buffer is essential). The safest answer to the question should be 'no'.
当然可以,除非您的缓冲区是静态的。
Sure you can, unless your
buffer
isstatic
.是的。
为什么你认为你不能?没有全球性的吧
想到一件事:缓冲区是函数的本地缓冲区,为什么要格式化字符串而不对其执行任何操作?
Yes.
Why do you think you could not? There's no global.
One thing thought: the buffer is local to the function, why would you want to format a string and do nothing with it?