C++ 为什么要将字符分配给C++;字符串导致字符串长度为0?

C++ 为什么要将字符分配给C++;字符串导致字符串长度为0?,c++,string,C++,String,我手动将一个字符串中的字符分配给另一个字符串数组。但为什么它会导致长度为0且无法直接打印?尽管字符串中的字符可以通过迭代打印 代码: 通过写作 string domain[100] 创建一个包含100个空字符串的数组,然后尝试使用[]运算符访问字符串字符,但该字符串没有字符,因此设置这些字符将不起作用。你甚至不应该尝试通过这种方式访问它们。它会导致未定义的行为 编辑 在这方面: domain[0][i] = text[i]; 您尝试设置第一个字符串的第i个字符。但是这个字符串有多少个字符?

我手动将一个字符串中的字符分配给另一个字符串数组。但为什么它会导致长度为0且无法直接打印?尽管字符串中的字符可以通过迭代打印

代码:

通过写作

 string domain[100]
创建一个包含100个空字符串的数组,然后尝试使用
[]
运算符访问字符串字符,但该字符串没有字符,因此设置这些字符将不起作用。你甚至不应该尝试通过这种方式访问它们。它会导致未定义的行为

编辑

在这方面:

domain[0][i] = text[i];
您尝试设置第一个字符串的第i个字符。但是这个字符串有多少个字符?没有

这与您尝试类似的方法是一样的:

domain[0] = "abc";
然后您可以访问
域[0][0]
,但无法访问
域[0][3]
,因为它只有3个字符。试着把它想象成一个数组。如果数组只有5个元素,则无法设置第10个元素。

 string domain[100]
string domain[100];
创建一个包含100个空字符串的数组,然后尝试使用
[]
运算符访问字符串字符,但该字符串没有字符,因此设置这些字符将不起作用。你甚至不应该尝试通过这种方式访问它们。它会导致未定义的行为

编辑

在这方面:

domain[0][i] = text[i];
您尝试设置第一个字符串的第i个字符。但是这个字符串有多少个字符?没有

这与您尝试类似的方法是一样的:

domain[0] = "abc";
然后您可以访问
域[0][0]
,但无法访问
域[0][3]
,因为它只有3个字符。试着把它想象成一个数组。如果数组只有5个元素,则不能设置第10个元素

string domain[100];
现在,您有了一个包含100个空
字符串
对象的数组

(为什么?你只使用了第一个…)

那是错误的标题。C++字符串在 < /C>中, < /C> >是现在包含的<强> C>强>字符串头(包含代码> STRCYY()/<代码>等)的不推荐方式。如果确实需要,请包括
,这将在
std::
命名空间中引入
中的名称

现在,您有了一个包含100个空
字符串
对象的数组

(为什么?你只使用了第一个…)



那是错误的标题。C++字符串在 < /C>中, < /C> >是现在包含的<强> C>强>字符串头(包含代码> STRCYY()/<代码>等)的不推荐方式。如果您真的想要这样做,请包括
,它在
std::
命名空间中引入了
中的名称。

您真的想创建一个包含100个
std::string
s的数组吗?@TartanLlama是的,用于竞争性编程问题。你真的打算制作一个100
std::string
s的数组吗?@TartanLlama是的,用于竞争性编程问题。我不明白。你能再解释一下吗?由于域[0][0]域[0][1]。。。域[0][5]各有一个字符。打印与打印有什么区别cout@user3411184
domain[0]
为空,因此
domain[0][0]
无效。最好的解决方案是获取一个并阅读它。哦,我明白了,上次编辑的帖子让我明白了。谢谢!我不明白。你能再解释一下吗?由于域[0][0]域[0][1]。。。域[0][5]各有一个字符。打印与打印有什么区别cout@user3411184
domain[0]
为空,因此
domain[0][0]
无效。最好的解决方案是获取一个并阅读它。哦,我明白了,上次编辑的帖子让我明白了。谢谢!在第一次迭代中,string::operator[]将返回对CharT()的引用(空字符)。这取决于执行吗?@songyuanyao:不完全是,它在标准定义中。请参阅链接。在C++11之前,
操作符[]
调用即使在第一次迭代时也是UB,因为
域[0]
不是
常量。谢谢你的回答,但我从另一个答案的解释中了解了更多。不管怎样,我会试试推回的谢谢@你能告诉我定义在标准中的位置吗?@宋元耀:不,我没有C++标准。我依赖于链接的文档。在第一次迭代中,string::operator[]将返回对CharT()的引用(空字符)。这取决于执行吗?@songyuanyao:不完全是,它在标准定义中。请参阅链接。在C++11之前,
操作符[]
调用即使在第一次迭代时也是UB,因为
域[0]
不是
常量。谢谢你的回答,但我从另一个答案的解释中了解了更多。不管怎样,我会试试推回的谢谢@你能告诉我定义在标准中的位置吗?@宋元耀:不,我没有C++标准。我依赖于链接的文档。