使用 calloc 创建字符串
create string with calloc
我试图用一个简单的 calloc 创建一个字符串,但我不明白为什么这段代码有效。这个 calloc 必须创建一个只有一个 space 的字符串才能只放一个字符,对吧?为什么,当我尝试打印我的字符串时,在标准输出上我看到值被转换为字符串?我以为在 stdout 上只出现了第一个数字,因为我只用 calloc 分配了一个 space.
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);
}
sprintf
将尝试将整个值写入字符串数组。它不知道内存的大小。您最终写入无效内存。碰巧你没有引起段错误。
使用大小为 1 的 snprintf
,但在这种情况下它总是 return 一个空字符串。如果您只是想提取第一个字符,请使用 snprintf(string, 2, "%d", value);
并将 calloc
大小增加到 2 个字节。 (一个用于末尾的 NUL 字符)
我试图用一个简单的 calloc 创建一个字符串,但我不明白为什么这段代码有效。这个 calloc 必须创建一个只有一个 space 的字符串才能只放一个字符,对吧?为什么,当我尝试打印我的字符串时,在标准输出上我看到值被转换为字符串?我以为在 stdout 上只出现了第一个数字,因为我只用 calloc 分配了一个 space.
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);
}
sprintf
将尝试将整个值写入字符串数组。它不知道内存的大小。您最终写入无效内存。碰巧你没有引起段错误。
使用大小为 1 的 snprintf
,但在这种情况下它总是 return 一个空字符串。如果您只是想提取第一个字符,请使用 snprintf(string, 2, "%d", value);
并将 calloc
大小增加到 2 个字节。 (一个用于末尾的 NUL 字符)