c - C 中的指针和函数歧义

标签 c function pointers

请看下面的代码:

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

void main()
{
    printf("%s",test());
}

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

char word[20];

通过 char *word;

它打印出正确的值。根据我的说法,指针变量应该像字符数组一样被销毁,输出应该是一些垃圾值。谁能解释一下歧义?

最佳答案

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

关于c - C 中的指针和函数歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11178494/

相关文章:

c - C 中的旋转算法?

c - 在c中编码离散分布时的精度问题

c - 浮点值 - 基础知识

c++ - 访问存储在 vector 中的指针内的字符串时崩溃

c++ - 是否有任何非GPL开源C\C++ H264编码库?

c# - 将 Ruby 的时间转换为 C#

javascript - 在函数中声明 window.variable 会使值成为全局值吗?

JQuery 选择下拉更改事件 - 选择默认值

将一定数量的字符从一个指针复制到另一个指针

c - 指向字符串的指针数组未按应有的方式存储数据