繁体   English   中英

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

[英]segmentation fault (core dumped) error when trying to copy from an array

试图将东西从 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;
}

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

看起来你在理解指针方面有一些问题,所以我建议你阅读它们。 还可以考虑阅读您正在使用的 STL 中的数据类型和类型。 (因为 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_tunsigned int而不是int ,因为您不需要负数来分割这些字符串。 ()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM