相关疑难解决方法(0)

sprintf_s,缓冲区太小

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

char buffer[10];    
int length = sprintf_s( buffer, 10, "1234567890.1234567890." ); 
Run Code Online (Sandbox Code Playgroud)

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

编辑:

阅读下面的评论后,我选择_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 
Run Code Online (Sandbox Code Playgroud)

c error-handling printf tr24731

10
推荐指数
3
解决办法
3万
查看次数

标签 统计

c ×1

error-handling ×1

printf ×1

tr24731 ×1