终身价值

Lifetime of value

本文关键字:      更新时间:2023-10-16

我对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("%sn",host);
    return 0;
}

编辑:

代码片段来自Begining Linux Programming 4th edition书,第15章:套接字很抱歉,作者犯了这样的错误。但在我看来,书是好的,排除这段代码

myname数组的生命周期[;]是它仍然活着的if语句?

没有

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

这是丑陋的,糟糕的代码和UB,用std::string代替host

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

在C和c++中是相同的(destroy => undefined)

一旦离开if块,myname[256]就没有保证了。编译器中没有任何东西可以跟踪host指向myname的事实,以"保持它的活力"。

相关文章:
  • 没有找到相关文章