这个问题可能很简单,但是经过数小时的研究和编辑,我无法使其正常工作,所以在这里发布我的问题。
我正在尝试制作一个函数,该函数接收一位整数或两位整数,然后将其转换为两位整数格式(例如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 ++运行时库-----------
调试断言失败!
文件:minkernel \ crts \ ucrt \ src \ appcrt \ stdio \ output.cpp
线:261
表达式:format!= nullptr
有什么问题,我该如何解决?先感谢您。
您正在将一个空指针传递给该sprintf_s
函数。您在此行中声明的指针
static char *return_string;
从未初始化过指向任何东西。由于声明为静态,因此将其预先初始化为零(而不只是具有不确定的值)。
这就是消息告诉您的内容。代码中有一个assert
,sprintf_s
用于检查您是否未传递空指针,这就是触发的原因。
您应该传递一个指向该函数可以写入的缓冲区的指针。但是,由于您使用的是C ++,因此实际上只应使用a std::string
,然后可以从该函数返回而无需静态变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句