代码之家  ›  专栏  ›  技术社区  ›  ME Desings

尝试从阵列复制时出现分段错误(核心转储)错误

  •  0
  • ME Desings  · 技术社区  · 2 年前

    试图将b中的内容复制到a中,但我遇到了错误 有人告诉我,这意味着我正在尝试访问不允许访问的内存,但我不知道该怎么做才能使其编译。

    replace(txt , code);

    string replace(string a , string b)
    {
        string alpha[26] = {"abcdefghijklmnopqurstuvwxyz"};
    
        for (int i = 0; i < strlen(a); i++)
        {
            for(int n = 0; n < 26; n++)
            {
                if(a[i] == alpha[n])
                {
                    a[i] = b[n];
                    i++;
                }
            }
        }
        return word;
    }
    

    我是一个初学者,所以不要对干净的编码或语法糖之类的东西发表评论,请帮我解决这个问题

    1 回复  |  直到 2 年前
        1
  •  0
  •   THE_CHOODICK    2 年前

    看起来你在护理不足方面有一些问题 pointers ,所以我建议你读一下。还可以考虑阅读 datatypes types from STL you are using . (因为std::string已经是一个值数组,所以在创建std::string[26]时,实际上是在创建指向指针的指针)

    我猜你是在尝试这样做:

    std::string replace(string a , string b)
    {
        std::string alpha = {"abcdefghijklmnopqurstuvwxyz"};
    
        for (size_t i = 0; i < a.size(); ++i)
        {
            for(size_t n = 0; n < alpha.size(); ++n)
            {
                if(a[i] == alpha[n])
                {
                    a[i] = b[n];
                    i++; // Also, I think you doesnt need this line, cause you already incrementing i in for loop
                }
            }
        }
        return a;
    }
    

    您还使用了 strlen() 在字符串上,这也是不正确的,因为它用于char值。如果你想知道字符串的长度,最好使用 string.lenght()

    此外,最好使用 size_t unsigned int 而不是 int 在这种情况下,因为不需要负数来排列这些字符串。()