我使用两种方法来创建数组。我曾经认为它们是相同的但它们看起来不同。
char *buffer=malloc((sizeof(char)*100));
char buffer1[100];
strcpy(buffer,"Eric");
strcpy(buffer1,"Eric");
for (int i=0; i<100; i++) {
printf("%c",buffer[i]);
}
printf("\n");
for (int i=0; i<100; i++) {
printf("%c",buffer1[i]);
}
结果是
Eric
Eric?!^?{"Gl?(?!^?(?!^?@?!^?0?P?!^?
我检查了阵列,然后发现阵列中有一些奇怪的数字。但是为什么当我使用malloc创建数组时。奇怪的数字不存在?
答案 0 :(得分:3)
显然,系统上的malloc
正在清除返回的内存。这样做可以防止数据从一个进程泄漏到另一个进程,或者帮助调试。或者你可能刚刚幸运,下次malloc
无法清除内存,例如,因为它来自一个已经过程本地的池。所以,不要指望它。 calloc
可用于此目的。
第二种机制只是调整堆栈指针。在函数输入之前堆栈上的任何内容仍然存在。清除它会花费时间,因此C编译器不会生成代码。