为什么我的char数组中有随机字符?

时间:2016-08-23 10:38:21

标签: c

当我在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,或者是否有一个函数可以执行此操作?

1 个答案:

答案 0 :(得分:7)

未初始化的本地非静态变量(如数组func)具有不确定值。在没有初始化的情况下以任何方式使用它们undefined behavior

实际上,内容将是您运行程序时在内存中发生的任何内容。它将看似随机。