我有一个C++应用程序,客户在该应用程序中报告了崩溃问题,但是崩溃问题不容易重现。
在分析了一些日志之后,我发现崩溃可能发生在以下代码部分之间。请告诉我,如果我有这些代码语句,就有可能使应用程序崩溃?
//Tesrt
std::string strAppName = "App1\0";
int nSize = 10;
sprintf_s(szBuff, "The appname %s have %d dependancies ", strAppName.c_str(), nSize);
//Then use the szBuff to log to a text file
//Test end
最佳答案
问题是您尚未提供correct arguments to sprintf_s
:
int sprintf_s(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument] ...
);
sprintf_s
将size_t
作为其第二个参数(szBuff
的大小),但是您尚未提供。相反,您给了它一个const char *
,该参数应该在该位置。进行编译的唯一方法是让您忽略编译器警告。所以
sprintf_s
看到的是:打印到的缓冲区
允许大量字符进入缓冲区
strAppName.c_str()
作为格式字符串换句话说,这并没有做您想要的任何事情。提供
szBuff
的大小作为第二个参数,我敢打赌您的问题会消失。是的,鉴于您所做的一切,我希望整个地方都崩溃。
关于c++ - 使用sprintf_s崩溃C++应用程序而未指定字符串长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11260755/