我用两种方法创建数组。我以前以为它们是一样的,但看起来不一样。
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创建数组时。奇怪的数字不存在?
最佳答案
显然,系统上的malloc
正在清除返回的内存。这样做可以防止数据从一个进程泄漏到另一个进程,或者有助于调试。或者你可能只是运气好,下次malloc
不会清除内存,例如,因为它来自一个已经在进程本地的池。所以,不要指望它。calloc
可用于此目的。
第二种机制只是调整堆栈指针。函数输入前堆栈上的内容仍然存在。清除它需要时间,所以C编译器不会生成这样的代码。
关于c - 为什么未初始化的数组中有一些奇怪的数字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24615219/