问题可能很简单,但经过数小时的研究和编辑后我无法让它工作,所以我在这里发布我的问题。
我正在尝试创建一个函数,它接收单个数字整数或两个数字整数,并将其转换为两个整数格式(例如 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/