我用两种方法创建数组。我以前以为它们是一样的,但看起来不一样。

  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/

10-13 07:04