用calloc创建字符串

时间:2016-03-17 23:42:04

标签: c string malloc calloc

我试图用简单的calloc创建一个字符串,但我不明白为什么这段代码有效。这个calloc必须创建一个只有一个空格的字符串,只放一个char,对吗?为什么,当我尝试在stdout上打印我的字符串时,我看到值被转换为字符串?我认为stdout只出现了第一个数字,因为我已经用calloc分配了一个空格。

int main(int argc, const char* argv[]) {
    char* string;
    int value=6000031;
    string=calloc(1,sizeof(char));
    sprintf(string,"%d",value);
    printf("%s\n",string);
    free(string);
    exit(EXIT_SUCCESS);
}

1 个答案:

答案 0 :(得分:5)

sprintf将尝试将整个值写入字符串数组。它不知道内存的大小。你最终写入无效的内存。只是你不会引起段错误。

使用大小为1的snprintf,但在这种情况下它总是会返回一个空字符串。如果您只是尝试拉出第一个字符,请使用snprintf(string, 2, "%d", value);并将calloc大小增加到2个字节。 (最后一个是NUL角色)