我对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章:套接字
我很抱歉作者犯了这样的错误。但我认为这本书很好,不包括这段代码。
答案 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
的事实,以便“保持活着”。