gpt4 book ai didi

c++ - sprintf_s 崩溃

转载 作者:行者123 更新时间:2023-11-30 01:29:27 27 4
gpt4 key购买 nike

我在 sprintf_s 中偶尔执行以下代码时发生崩溃。这段代码工作了很多年,没有任何问题。当我按照下面的语句在 strcat_s 和 sprintf_s 中给出大小时,不会出现崩溃。这可能是什么原因?

strcat_s(sztmpCurrDate,100,sztmpCurrTime);sprintf_s(sztmpCurrDate,100,"%s:%0.3d",sztmpCurrDate,curTime.wMilliseconds);;

char sztmpCurrDate[100] = "";
char sztmpCurrTime[100] = "";
SYSTEMTIME curTime;
GetLocalTime(&curTime);
GetLocalTime(&curTime);
GetDateFormat(LOCALE_USER_DEFAULT,
DATE_SHORTDATE,
&curTime,
NULL,
sztmpCurrDate,
100);

GetTimeFormat(LOCALE_USER_DEFAULT,
TIME_FORCE24HOURFORMAT,
&curTime,
"HH':'mm':'ss",
sztmpCurrTime,
100);

strcat_s(sztmpCurrDate," ");
strcat_s(sztmpCurrDate,sztmpCurrTime);
sprintf_s(sztmpCurrDate,"%s:%0.3d",sztmpCurrDate,curTime.wMilliseconds);

最佳答案

来自documentation for sprintf_s :

If copying occurs between strings that overlap, the behavior is undefined.

您的代码:

sprintf_s(sztmpCurrDate,"%s:%0.3d",sztmpCurrDate,curTime.wMilliseconds);

从源复制到目标 sztmpCurrDate。此外,您还没有指定目标字符串的大小,这是 sprintf_s 所要求的(我不知道您的代码是如何编译的)。尝试:

sprintf_s(sztmpCurrDate + strlen(sztmpCurrDate), 100-strlen(sztmpCurrDate),
":%0.3d",curTime.wMilliseconds);

更好的方法是使用 std::string,因为您使用的是 C++,这样您就不必担心这种 C 字符串操作错误。

关于c++ - sprintf_s 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5892376/

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