当我在C中编译并运行以下内容时,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ()
{
char func[16];
for(int i = 0; i < sizeof(func); i++) {
printf("Char %d in func is %c\n", i, func[i]);
}
return 0;
}
我明白了:
Char 0 in func is P
Char 1 in func is
Char 2 in func is @
Char 3 in func is
Char 4 in func is
Char 5 in func is
Char 6 in func is
Char 7 in func is
Char 8 in func is p
Char 9 in func is
Char 10 in func is @
Char 11 in func is
Char 12 in func is
Char 13 in func is
Char 14 in func is
Char 15 in func is
当我在不同时间编译时,我在char数组中得到不同的随机字符。我猜这是因为它在内存中找到了随机的ASCII字符,指针被删除但实际信息仍留在堆中?
我是否应该在for循环中将我的数组中的所有内容设置为null,或者是否有一个函数可以执行此操作?
答案 0 :(得分:7)
未初始化的本地非静态变量(如数组func
)具有不确定值。在没有初始化的情况下以任何方式使用它们undefined behavior。
实际上,内容将是您运行程序时在内存中发生的任何内容。它将看似随机。