C++ 在“中指定字符文字”;如果;块

C++ 在“中指定字符文字”;如果;块,c++,memory,C++,Memory,我现在对这段代码感到困惑 int flag = 1; struct { char * data; } neco; if(flag) { neco.data = "index.html"; } // insert code here... std::cout << neco.data; } int标志=1; 结构{ 字符*数据; } neco; 国际单项体育联合会(旗){ neco.data=“index.html”; } //在这里插入代码。。。 标准::cout

我现在对这段代码感到困惑

int flag = 1;
struct {
    char * data;
}
neco;
if(flag) {
    neco.data = "index.html";
}
// insert code here...
std::cout << neco.data;
}
int标志=1;
结构{
字符*数据;
}
neco;
国际单项体育联合会(旗){
neco.data=“index.html”;
}
//在这里插入代码。。。
标准::cout
在“如果”块或内存定位后打印neco.data是安全的
在“如果”块结束后,是否在内部“清洁”块

字符串文字永远不会超出范围。该计划本身就是他们的范围

正如us2012在评论中所提到的,您需要确保neco.data已初始化,或者如果未使用该分支,则永远不要使用它

在“如果”块或内存定位后打印neco.data是安全的 在“如果”块结束后,是否在内部“清洁”块

字符串文字永远不会超出范围。该计划本身就是他们的范围

正如us2012在评论中所提到的,您需要确保neco.data已初始化,或者如果未使用该分支,则永远不要使用它

在“如果”块后打印neco.data是否安全,或者在“如果”块结束后“清理”块内的内存是否安全

所讨论的字符串文本,
“index.html”
,将在
if
块结束后继续存在,因此在这方面代码没有问题

在“如果”块后打印neco.data是否安全,或者在“如果”块结束后“清理”块内的内存是否安全


问题中的字符串文字“代码>”html“,如果块,将继续存在于的结尾,因此在这方面代码是好的。< /P>你所说的“安全”是什么?这不是C/C++,它是C++。@ Daniel Kamil Kozar:是的,代码是C++,但是问题是所有语言的相同。你说的“安全”是什么意思?这不是C/C++,它是C++。@ Daniel Kamil Kozar:是的,代码是C++,但是所有语言+1的问题都是一样的,但是我要补充的是,OP提供的代码可能不安全,因为<代码> NIGO。如果<代码>旗标= 0 ,数据< /代码>是未初始化的。(它现在说

int flag=1;
但谁知道什么时候可能会改变…+1,但我要补充的是,OP提供的代码可能不安全,因为
neco。如果
flag==0
,数据
是未初始化的(它现在说
int flag=1;
,但谁知道什么时候可能会改变…)。。。