Winapi 调用malloc的snprintf,或不调用malloc的snprintf
我需要snprint的变体,该变体保证它不会调用malloc。Winapi 调用malloc的snprintf,或不调用malloc的snprintf,winapi,stdio,Winapi,Stdio,我需要snprint的变体,该变体保证它不会调用malloc。 这是因为这个snprintf(我们称之为safe_snprint())将 从malloc将失败或死锁的位置调用 什么更接近事实,1或2 在Windows上,本机snprintf可能会调用malloc。然后 我需要拉取开源snprintf.c并称之为safe\u snprintf()。或 在Windows上,本机snprint保证从不调用malloc 如果在某处有文档记录,我更喜欢(2)。谢谢没有理由让snprintf()调用mall
这是因为这个snprintf(我们称之为safe_snprint())将
从malloc将失败或死锁的位置调用 什么更接近事实,1或2
我需要拉取开源snprintf.c并称之为safe\u snprintf()。或
如果在某处有文档记录,我更喜欢(2)。谢谢没有理由让snprintf()调用malloc()。句号 但是,如果不查看源代码,则无法确定。即使这样,你也不能确定它会保持这种状态
如果您必须绝对确定,那么您可能需要实现自己的snprintf()。没有理由让snprintf()调用malloc()。句号 但是,如果不查看源代码,则无法确定。即使这样,你也不能确定它会保持这种状态
如果您必须绝对确定,那么您可能希望实现自己的snprintf()。在VC库(MSVCRT)中实现
\u snprintf()
,仅当且仅当(iff)格式精度超过163个字符时,才会在浮点转换时调用malloc。这适用于%E
%G
%A
%E
%f
%G
和%A
格式说明符
此应适用于至少从版本6开始的所有MSVCRT版本。在VC库(MSVCRT)中实现\u snprintf()
仅当且仅当(iff)格式精度超过163个字符时,才会在浮点转换时调用malloc。这适用于%E
%G
%A
%E
%f
%G
和%A
格式说明符
此应适用于MSVCRT的所有版本,至少从版本6开始。根据windowssnprintf
实现,我找不到文档,但声明可能有理由调用内部malloc
。我也不认为任何标准都禁止开发人员使用它。因此,我建议您使用第一种方法。您可以找到snprintf
实现的列表。根据windowssnprintf
实现,我找不到文档,但声明可能有内部malloc
调用的原因。我也不认为任何标准都禁止开发人员使用它。因此,我建议您使用第一种方法。您可以找到一个snprintf
实现的列表。我现在没有MSVC源代码,但是没有理由snprintf
需要进行任何分配。所有需要做的事情都可以使用基于堆栈的内存来完成。目前我手头没有MSVC源代码,但是没有理由要求snprintf
进行任何分配。所有需要做的事情都可以使用基于堆栈的内存来完成。snprintf()在预先分配的内存上工作。它不需要自己的内存。我真的无法想象它为什么会调用malloc()。但你为什么不追踪一下呢?int main(void){char buff[512];snprintf(buff,512,“%d%s”,10,“lala”);}和一个跟踪程序可以告诉您真相。这只涉及一个特定的、小而简单的格式说明符。如果用户打印120k长字符串怎么办?如果调用使用%$说明符怎么办?什么是用户使用%*.*说明符?需要访问源代码才能确保.snprintf()在预先分配的内存上工作。它不需要自己的内存。我真的无法想象它为什么会调用malloc()。但你为什么不追踪一下呢?int main(void){char buff[512];snprintf(buff,512,“%d%s”,10,“lala”);}和一个跟踪程序可以告诉您真相。这只涉及一个特定的、小而简单的格式说明符。如果用户打印120k长字符串怎么办?如果调用使用%$说明符怎么办?什么是用户使用%*.*说明符?我们需要访问源代码才能确定。