以下代码会导致错误并终止我的应用程序。这是有道理的,因为缓冲区只有 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