sprintf_s的缓冲区太小了[英] sprintf_s with a buffer too small

本文是小编为大家收集整理的关于sprintf_s的缓冲区太小了的处理方法,想解了sprintf_s的缓冲区太小了的问题怎么解决?sprintf_s的缓冲区太小了问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

以下code会导致错误并杀死我的申请.是有意义的缓冲器仅为10字节长,所述文本是22字节长(缓冲区溢出).

 字符缓冲区[10];
INT长度= sprintf_s(缓冲液,10",1234567890.1234567890.");

我如何赶上这个错误,所以我可以举报,而不是崩溃我的应用程序?

编辑:

阅读下面的评论我_snprintf_s去后.如果返回-1值则缓冲区没有更新.

 长度= _snprintf_s(缓冲,10,9,"123456789");
的printf("1)长度=%d个\\ N",长度); //长度== 9长度= _snprintf_s(缓冲液,10,第9,"1234567890.1234567890.");
的printf("2)长度=%d个\\ N",长度); //长度== -1长度= _snprintf_s(缓冲液,10,10,"1234567890.1234567890.");
的printf("3)长度=%d个\\ N",长度); //崩溃,它需要的空间的NULL字符

解决方案

而不是 sprintf_s ,你可以使用的snprintf (又名 _snprintf 在Windows上).

 的#ifdef WIN32
#定义的snprintf _snprintf
#万一炭缓冲液[10];
INT长度= snprintf的(缓冲液,10",1234567890.1234567890.");
// UNIX的snprintf返回长度产量将要求;
//窗口_snprintf返回如果输出适合实际输出长度,否则负
如果(长度&GT = sizeof的(缓冲器)||长度℃下)
{
    / *错误处理* /
}

本文地址:https://www.itbaoku.cn/post/359232.html