我需要snprint的变体,保证它永远不会调用malloc 那是因为这个snprintf(我们称之为safe_snprint())将会发生 从malloc失败或死锁的地方调用。
什么更接近真相,1还是2?
在Windows上,本机snprintf可能会调用malloc。然后
我需要拉开源snprintf.c并将其命名为safe_snprintf()。或
在Windows上,本机snprint保证永远不会调用malloc。
如果在某处记录,我更愿意(2)。感谢
答案 0 :(得分:4)
VC库(MSVCRT)中_snprintf()
的实现只会在浮点转换时调用malloc,当且仅当(iff)格式精度超过163个字符时。这适用于%E
%G
%A
%e
%f
%g
和%a
格式说明符。
此应该适用于所有版本的MSVCRT,至少从版本6开始。
答案 1 :(得分:1)
我无法根据Windows snprintf
实施找到文档,但this link表示可能有理由进行内部malloc
调用。此外,我不认为任何标准禁止开发人员使用它。所以我建议你使用第一种方法。 Here您可以找到snprintf
实施列表。
答案 2 :(得分:0)
snprintf()没有理由调用malloc()。周期。
但是,如果没有查看来源,你就无法确定。即便如此,你还不能确定它会保持这种状态。
如果你必须绝对确定,那么你可能想要实现自己的snprintf()。