C++ 呃

C++ 呃,c++,c,arrays,C++,C,Arrays,上面的示例中缺少空字符是否会导致以后出现一些问题 如果将未终止的数组传递给期望终止的数组的函数,那么它将跺掉数组的末尾,从而导致未定义的行为 以这种方式定义字符数组时,是否建议始终包含或排除空字符 我建议理解数组应该用于什么,如果它应该是C样式的字符串,则包括终止符 如果在定义字符数组时忽略空字符,会发生什么情况 您将得到一个仅包含指定字符的数组 在这种情况下,空字符的重要性是什么 在C语言中,通常将字符串表示为以null结尾的字符数组。这个约定有时在C++中与C风格的接口交互,或者与字符串文字

上面的示例中缺少空字符是否会导致以后出现一些问题

如果将未终止的数组传递给期望终止的数组的函数,那么它将跺掉数组的末尾,从而导致未定义的行为

以这种方式定义字符数组时,是否建议始终包含或排除空字符

我建议理解数组应该用于什么,如果它应该是C样式的字符串,则包括终止符

如果在定义字符数组时忽略空字符,会发生什么情况

您将得到一个仅包含指定字符的数组

在这种情况下,空字符的重要性是什么

在C语言中,通常将字符串表示为以null结尾的字符数组。这个约定有时在C++中与C风格的接口交互,或者与字符串文字(继承了C的规范),或者程序员认为这是一个好主意。如果要这样做,显然需要终止所有要解释为字符串的数组

问题似乎是关于C++的,尽管你也因为某种原因对它进行了标记。在C++中,通常需要使用:ST::String < /Cord>来管理字符串。生命太短暂了,不能和低级数组和指针混在一起

上面的示例中缺少空字符是否会导致以后出现一些问题

如果将未终止的数组传递给期望终止的数组的函数,那么它将跺掉数组的末尾,从而导致未定义的行为

以这种方式定义字符数组时,是否建议始终包含或排除空字符


我建议您了解数组的用途,如果它应该是C样式的字符串,则应包括终止符。

答案完全取决于您接下来将如何处理字符数组。如果以后把数组当作C字符串来处理,可能会产生问题。如果你真的写C++,那就不要这样做。使用
std::string
。答案完全取决于下一步如何使用char数组。如果以后把数组当作C字符串来处理,可能会产生问题。如果你真的写C++,那就不要这样做。使用
std::string
。可能会失败,我们处于未定义行为的领域。@john我的意思是“失败”是指不能做你期望它做的事情,但是是的,它是UB,你甚至可能没有注意到它出了什么错。没错。下一个字节可能恰好为零,因此代码可能会在某些时候正常工作,但其他任何地方的微小更改都可能会突然改变内存布局,从而出现难以追踪的奇怪错误。这就是
std::string::string(char const*)
,而不是
char const&
。可能会失败,我们处于未定义行为的领域。@john我的意思是“失败”,也就是“不能做你期望它做的事”,但是是的,它是UB,你甚至可能没有注意到它做错了什么。下一个字节可能恰好为零,因此代码可能在某些时间内正常工作,但其他任何地方的微小更改都可能会突然改变内存布局,从而出现难以追踪的奇怪错误。这是
std::string::string(char const*)
,而不是
char const&
char myarray[] = {'a', 'b', 'c', '\0'};
char myarray[] = {'a', 'b', 'c'};
char myarray[] = {'a', 'b', 'c'};  
const char* mystr = "abc"; // it is already null terminated
char myarray[] = {'a', 'b', 'c', '\0'};