gpt4 book ai didi

c++ - sprintf_s() 失败并出现 "debug assertion failed"错误

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

问题可能很简单,但经过数小时的研究和编辑后我无法让它工作,所以我在这里发布我的问题。

我正在尝试创建一个函数,该函数接收一位整数或两位整数,并在将其转换为两位整数格式(例如 7 到 07)后将其作为字符串返回。

char *to_two_digits(int num) {

char num_str[4];

sprintf(num_str, "%d", num);

int length = sizeof(*num_str) / sizeof(char);

static char *return_string;

if (length == 1) {

sprintf_s(return_string, "0%d", num);

return return_string;
}
else if (length == 2) {
*return_string = *num_str;
return return_string;
}
else {
printf("Error! Number cannot be represented as a two-digit.");
exit(1);
}
}

运行 sprintf_s() 函数时该函数失败,并显示错误:

--------------------------- Microsoft Visual C++ Runtime Library-----------

Debug Assertion Failed!

File: minkernel\crts\ucrt\src\appcrt\stdio\output.cpp

Line: 261

Expression: format != nullptr

问题是什么,我该如何解决?提前谢谢你。

最佳答案

您正在将空指针传递给 sprintf_s 函数。您在此行中声明的指针

static char *return_string;

从未初始化为指向任何东西。由于它被声明为静态的,因此它被预初始化为零(而不是仅仅具有不确定的值)。

这就是消息要告诉您的内容。 sprintf_s 代码中有一个 assert,用于检查您是否传递了空指针,这就是触发的原因。

你应该传入一个指向函数可以写入的缓冲区的指针。但由于您使用的是 C++,因此您实际上应该为此使用 std::string,然后您可以从函数返回它而无需静态变量。

关于c++ - sprintf_s() 失败并出现 "debug assertion failed"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37885388/

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