C - 使用 calloc 创建字符串



我正在尝试使用简单的calloc创建一个字符串,但我不明白为什么这段代码有效。这个calloc必须创建一个只有一个空格的字符串才能只放置一个字符,对吧?为什么,当我尝试打印我的字符串时,在标准输出上我看到值转换为字符串?我以为在 stdout 上只出现了第一个数字,因为我只用 calloc 分配了一个空格。

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

sprintf将尝试将整个值写入字符串数组。 它不知道内存的大小。 您最终会写入无效内存。 碰巧您没有导致赛格故障。

使用大小为 1 的 snprintf,但在这种情况下,它将始终返回空字符串。 如果您只是想拉掉第一个字符,请使用 snprintf(string, 2, "%d", value); 并将calloc大小增加到 2 个字节。 (一个用于末尾的 NUL 字符)

相关内容

  • 没有找到相关文章

最新更新