终身价值
Lifetime of value
我对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
的事实,以"保持它的活力"。
相关文章:
- 没有找到相关文章