C语言中的指针和函数歧义

dej*_*avu 0 c pointers function

请看下面的代码:

char* test ( )
{
    char word[20];
    printf ("Type a word: ");
    scanf ("%s", word);
    return word;
}

void main()
{
    printf("%s",test());
}
Run Code Online (Sandbox Code Playgroud)

当函数返回时,变量word被销毁并打印一些垃圾值.但当我更换

char word[20];
Run Code Online (Sandbox Code Playgroud)

通过 char *word;

它打印正确的值.根据我的说法,指针变量应该被破坏,类似于字符数组,输出应该是一些垃圾值.任何人都可以解释一下这种含糊之处吗?

Ant*_*ony 5

未定义的行为只是 - 未定义.有时似乎会起作用,但这只是巧合.在这种情况下,未初始化的指针可能恰好指向有效的可写内存,并且该内存不用于其他任何内容,因此它成功写入并读取该值.这显然不是你应该指望的.