c++ - 为什么将字符分配给 C++ 字符串会导致字符串长度为 0?

标签 c++ string

我手动将字符串中的字符分配给另一个字符串数组。但是为什么会导致长度为0,不能直接打印呢?虽然字符串中的字符可以通过迭代打印出来。

代码:

#include <iostream>
#include <string.h>
using namespace std;

int main() {

    string domain[100],text="google";
    for(int i=0;i<6;i++){
        domain[0][i] = text[i];
    }
    for(int k=0;k<6;k++){
        cout<<domain[0][k];
    }
    cout<<endl;
    cout<<"String length: "<<domain[0].length()<<endl;
    cout<<"Output string directly from array : "<<domain[0]<<endl;
    return 0;
}

输出:

google
String length: 0
Output string directly from array : 

最佳答案

通过写作

 string domain[100]

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

编辑。

在这一行中:

domain[0][i] = text[i];

您尝试设置第一个字符串的第 i 个字符。但是这个字符串有多少个字符呢?没有。

这就好像你尝试这样的事情一样:

domain[0] = "abc";

那么你可以访问domain[0][0]但是不能访问domain[0][3]因为它只有3个字符。试着把它想象成一个数组。如果数组只有 5 个元素,则不能设置第 10 个元素。

关于c++ - 为什么将字符分配给 C++ 字符串会导致字符串长度为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477364/

相关文章:

android - iOS/Android 上的 OpenMP

c++ - 如何在 64 位(而不是任何 80 位寄存器)中强制所有 double

c++ - 在两个元素的数组之间转换 std::complex。

python - 正则表达式 (regex) 从 Python 中的字符串中删除单词 "and"、非字母数字字符和空格

vba - 如果正文包含字符串,则删除签名

python - 使用可选的定界符连接字符串和 None/string

不同类型循环上的 Javascript

c++ - Visual Studio 项目属性中没有链接器选项

c++ - QTextEdit : how can I modify text being pasted into editor?

objective-c - 针对几个不同的字符串测试文本字段的内容