Tro*_*ten 0 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);
}
Run Code Online (Sandbox Code Playgroud)
sprintf将尝试将整个值写入字符串数组.它不知道内存的大小.你最终写入无效的内存.它恰好发生了你没有引起seg故障.
使用snprintf大小为1,但在这种情况下它总是返回一个空字符串.如果您只是尝试拉出第一个字符,请使用snprintf(string, 2, "%d", value);并将calloc大小增加到2个字节.(最后一个是NUL角色)
| 归档时间: |
|
| 查看次数: |
2226 次 |
| 最近记录: |