终身价值

时间:2013-01-11 02:38:52

标签: c++ c

我对myname数组的生命周期感到困惑,它是否仍然存在于if语句中?我们在c和c ++中得到相同的答案吗?

int main (int argc, char* argv[])
{
    char* host;

    if (1 == argc)
    {
/*code below is copied from a book*/
        char myname[256];
        gethostname(myname, 255);
        host = myname;
/*code above is copied from a book*/
    }

    else
    {
        /*        */
    }
    printf("%s\n",host);

    return 0;
}

编辑:

代码段来自书籍Begining Linux Programming 4th edition,第15章:套接字 我很抱歉作者犯了这样的错误。但我认为这本书很好,不包括这段代码。

3 个答案:

答案 0 :(得分:7)

  

myname数组的生命周期[;]它是否仍然存在于if语句中?

Do we get the same answer in C and C++?

这是丑陋的,错误的代码并且有UB std::string使用host

答案 1 :(得分:1)

myname数组在if末尾被销毁。此时打印host可能正常,但未定义的行为,因为您使用的指针指向已被销毁的内存。它的功能取决于实现(和其他因素)。

C和C ++中的相同(销毁=>未定义)

答案 2 :(得分:0)

一旦离开if块,就无法保证myname[256]。编译器中没有任何内容可以跟踪host指向myname的事实,以便“保持活着”。