1 c++ arrays char literals list-initialization
当我试图计算它们时
char l[] {'t', 'r', 'y'};
std::cout << l << std::endl;
Run Code Online (Sandbox Code Playgroud)
我尝试在终端中打印。然而,当我尝试这样做时。
char l[] {'try'};
Run Code Online (Sandbox Code Playgroud)
我只得到了y。
我从 python 转向 c++,所以很多事情对我来说没有意义,所以你能解释一下这两个表达式的区别吗?
你的例子都无效。
char l[] {'t', 'r', 'y'};
std::cout << l << std::endl;
Run Code Online (Sandbox Code Playgroud)
在这里您定义l为一个char[3]. 没关系。然而,不像您那样打印它,因为operator<<您使用的重载需要一个以 null 结尾的字符串。您的char[3]不是空终止符,因此operator<<重载将尝试找到越界的空终止符,这会导致未定义的行为。一个可行的变体是
char l[] {'t', 'r', 'y', '\0'};
Run Code Online (Sandbox Code Playgroud)
这将使其末尾char[4]带有(空终止符)。\0char l[] {"try"};
Run Code Online (Sandbox Code Playgroud)
或者惯用的方式:
char l[] = "try";
Run Code Online (Sandbox Code Playgroud)
两个版本都会创建一个以 null 结尾的数组,就像char l[] {'t', 'r', 'y', '\0'};