首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用未指定字符串长度的sprintf_s使C++应用程序崩溃

使用未指定字符串长度的sprintf_s使C++应用程序崩溃
EN

Stack Overflow用户
提问于 2012-06-29 19:13:06
回答 1查看 1.4K关注 0票数 1

我有一个c++应用程序,客户在其中报告了crash.But崩溃不容易重现。在分析了一些日志和所有内容之后,我发现崩溃可能发生在以下代码部分之间。请告诉我,如果我有这些代码语句,有没有可能使应用程序崩溃?

代码语言:javascript
复制
    //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
EN

回答 1

Stack Overflow用户

发布于 2012-06-29 19:22:13

问题是您没有提供correct arguments to sprintf_s

代码语言:javascript
复制
int sprintf_s(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format [,
      argument] ... 
);

sprintf_s接受size_t作为它的第二个参数(szBuff的大小),但是您没有提供它。相反,您应该在该参数所在的位置给它一个const char *。对此进行编译的唯一方法是忽略编译器警告。

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

换句话说,这不是你想要的。提供szBuff的大小作为第二个参数,我敢打赌您的问题就会消失。

是的,考虑到你所做的一切,我预计到处都会发生崩溃。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11260755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档