簡體   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