gpt4 book ai didi

c++ - 在不指定字符串长度的情况下使用 sprintf_s 使 C++ 应用程序崩溃

转载 作者:行者123 更新时间:2023-11-30 04:26:52 30 4
gpt4 key购买 nike

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

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com