1

我有一个 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
4

1 回答 1

2

问题是您没有提供正确的参数sprintf_s

int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format [,
      argument] ... 
);

sprintf_s接受 asize_t作为它的第二个参数( 的大小szBuff),但您没有提供。相反,你已经给它一个const char *参数应该在哪里。编译它的唯一方法是让您忽略编译器警告。

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

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

是的,考虑到你所做的,我预计整个地方都会崩溃。

于 2012-06-29T11:22:12.680 回答