我有一个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_ssize_t作为其第二个参数(szBuff的大小),但是您尚未提供。相反,您给了它一个const char *,该参数应该在该位置。进行编译的唯一方法是让您忽略编译器警告。

所以sprintf_s看到的是:
打印到的缓冲区
允许大量字符进入缓冲区strAppName.c_str()作为格式字符串

换句话说,这并没有做您想要的任何事情。提供szBuff的大小作为第二个参数,我敢打赌您的问题会消失。

是的,鉴于您所做的一切,我希望整个地方都崩溃。

关于c++ - 使用sprintf_s崩溃C++应用程序而未指定字符串长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11260755/

10-13 07:09
查看更多