首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >缓冲区太小的sprintf_s

缓冲区太小的sprintf_s
EN

Stack Overflow用户
提问于 2009-10-01 19:34:06
回答 6查看 34.9K关注 0票数 10

下面的代码会导致错误并杀死我的应用程序。这是有意义的,因为缓冲区只有10字节长,文本只有22字节长(缓冲区溢出)。

代码语言:javascript
运行
复制
char buffer[10];    
int length = sprintf_s( buffer, 10, "1234567890.1234567890." ); 

我如何捕捉这个错误,这样我就可以报告它,而不是崩溃我的应用程序?

编辑:

在阅读了下面的注释之后,我使用了_snprintf_s,如果它返回一个-1值,那么缓冲区就没有更新。

代码语言:javascript
运行
复制
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 
EN

Stack Overflow用户

发布于 2009-10-01 19:43:55

来自MSDN:

sprintf_s和sprintf的另一个主要区别是,sprintf_s接受一个长度参数,指定以字符为单位的输出缓冲区的大小。如果缓冲区太小,无法打印文本,则将缓冲区设置为空字符串,并调用无效的参数处理程序。与snprintf不同,sprintf_s保证缓冲区将以空结束(除非缓冲区大小为零)。

因此,理想情况下,您所写的应该是正确的。

票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1505986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档