我有一个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
答案 0 :(得分:2)
问题是您没有提供correct arguments to sprintf_s
:
int sprintf_s(
char *buffer,
size_t sizeOfBuffer,
const char *format [,
argument] ...
);
sprintf_s
获取size_t
作为第二个参数(szBuff
的大小),但您没有提供。相反,你给它一个const char *
那个参数应该是。{1}}。编译它的唯一方法是让您忽略编译器警告。
所以sprintf_s
看到的是:
缓冲区打印成
允许大量字符进入缓冲区
strAppName.c_str()
作为格式字符串
换句话说,这并不像你想要的那样做。提供szBuff
的大小作为第二个参数,我敢打赌你的问题就会消失。
是的,鉴于你所做的一切,我希望能在整个地方崩溃。