sprintf_s()失败,并出现“调试断言失败”错误

虹吸管

这个问题可能很简单,但是经过数小时的研究和编辑,我无法使其正常工作,所以在这里发布我的问题。

我正在尝试制作一个函数,该函数接收一位整数或两位整数,然后将其转换为两位整数格式(例如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;

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章