在C

时间:2017-12-27 20:50:47

标签: c

我正在进行在线C语言测试(不是为了工作,仅仅是为了我自己)并且我使用哈希符号继续遇到这种类型的问题。我假设它不是拼写错误,我不熟悉这种哈希符号的使用。

#include <stdio.h>
int* func()
{
    int num = 10;
    return #
}
int main()
{
    int *ptr = func();
    printf("%d\n", *ptr);
    return 0;
}

上述C代码的输出是什么?

答案是它是运行时错误,解释是

  

函数中定义的变量将在堆栈段中分配,该函数将在函数返回时删除。因此,访问这些变量的地址会导致分段错误。

2 个答案:

答案 0 :(得分:23)

创建测试的人没有正确编码他们的HTML。他们希望这条线看起来像是:

return &num;

他们将其直接放入测试页面的HTML中,忘记&XXX;是HTML实体的输入方式。 &num;#字符的实体。他们应该写:

return &amp;num;

&amp;&字符的实体。

答案 1 :(得分:0)

函数func()返回指向变量num的指针。但num是函数func()中的一个自动变量。它存储在堆栈中,其生命周期只是函数本身的生命周期。因此,如果您尝试访问main()中的指针,那么将会出现分段错误cz num不再存在,因此指针并不真正指向任何东西。

编辑:

哈希 - #用于定义宏和头文件。返回# - &gt;它似乎只是问题中的拼写错误。因此,只有错误是指针导致的分段错误。