gpt4 book ai didi

c - 缓冲区太小的 sprintf_s

转载 作者:太空狗 更新时间:2023-10-29 16:46:08 25 4
gpt4 key购买 nike

以下代码会导致错误并终止我的应用程序。这是有道理的,因为缓冲区只有 10 个字节长,而文本有 22 个字节长(缓冲区溢出)。

char buffer[10];    
int length = sprintf_s( buffer, 10, "1234567890.1234567890." );

如何捕获此错误以便报告它而不是使我的应用程序崩溃?

编辑:

阅读下面的评论后,我选择了 _snprintf_s。如果它返回 -1 值,则缓冲区未更新。

length = _snprintf_s( buffer, 10, 9, "123456789" );
printf( "1) Length=%d\n", length ); // Length == 9

length = _snprintf_s( buffer, 10, 9, "1234567890.1234567890." );
printf( "2) Length=%d\n", length ); // Length == -1

length = _snprintf_s( buffer, 10, 10, "1234567890.1234567890." );
printf( "3) Length=%d\n", length ); // Crash, it needs room for the NULL char

最佳答案

这是设计使然。 sprintf_s*_s 系列的其他函数的全部意义在于捕获缓冲区溢出错误并将它们视为前提条件违规。这意味着它们并不是真的可以恢复。这旨在仅捕获错误 - 如果您知道字符串对于目标缓冲区来说可能太大,则永远不要调用 sprintf_s。在这种情况下,首先使用 strlen 来检查并决定是否需要修剪。

关于c - 缓冲区太小的 sprintf_s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1505986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com