为什么打印字符串显示垃圾

Ofe*_*ian -2 c initialization

您好我是C的新手,我正在尝试打印我自己设置的字符串,但它会打印垃圾.

我知道id[4]'\0'这样,我没有设置它.

int main(){
    char id[5];
    printf("Enter a string\n");
    id[0]=1;id[1]=2;id[2]=3;id[3]=4;
    printf("You entered the string %s\n",id); 
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 7

我知道的id[4]'\0'

嗯,你错了.

id作为自动局部变量,除非明确初始化,否则它包含不确定的值.所以,你不能确定任何价值,更不用说了'\0'.

引用C11,§6.7.9

如果未显式初始化具有自动存储持续时间的对象,则其值不确定.[....]

但是,如果你初始化它就像

 char id[5] = {0};
Run Code Online (Sandbox Code Playgroud)

然后,通过初始化规则,所有元素都被初始化为0,然后您可以依赖于空终止.