Malloc有C string的垃圾吗?

Der*_*rek 0 c

我是C的新手,所以请随时纠正错误.

我有一些代码有点像这样:

// some variables declared here like int array_size
char* cmd = (char*)malloc(array_size*sizeof(char));
for(;;){
    // code here sets cmd to some string
    free(cmd);
    array_size = 10;
    cmd = (char*)malloc(array_size*sizeof(char));
    // print 1
    printf(cmd);
    printf("%d\n", strlen(cmd));

    // repeat above for some time and then break

}
Run Code Online (Sandbox Code Playgroud)

所以我做了一段时间的循环,看看它打印的是什么.我期望的是每次字符串为空并且长度为0.但是,情况并非如此.显然有时候malloc会获得带有垃圾的内存并打印出来并且带有垃圾的内存有一个长度!= 0.所以我想通过在malloc返回时将新的char字符串中的所有char设置为'\ 0'来解决这个问题.但是,我很确定我做错了什么.为什么即使在我释放字符串并执行一个全新的malloc后,我的字符串与垃圾邮件不同,第一个malloc?我究竟做错了什么?

Jim*_*uck 9

malloc只是分配了内存,仅此而已.它对记忆中的内容没有任何承诺.具体来说,它不会初始化内存.如果您希望将已分配的内存清零,您可以手动执行memset或只是调用calloc(这实际上是malloc将内存清零).