簡體   English   中英

C ++中的字符串反轉得到“分段錯誤(核心轉儲)錯誤”

[英]String reversal in C++ getting 'Segmentation fault (core dumped) error

打印反向字符串后,下面的錯誤提示我“ Segmentation fault(core dumped)”錯誤。 誰能解釋為什么?

#include <iostream>
#include <string>
#include <cstdio>

using namespace std;

void print (char *str) {
    if (*str) {
        print (str+1);
        cout << *str;
    }
}

int main() {
    char *str;
    cin >> str;
    print(str);
    cout << endl;
    return 0;
}

未初始化的非靜態局部變量具有不確定的值,實際上似乎是隨機的。 在沒有初始化的情況下使用它們會導致未定義的行為 ,這是崩潰的最常見原因之一。

問題是您有一個指針,但是它沒有指向任何地方,因此當您使用它來讀取輸入時,輸入流cin將寫入內存中的隨機位置。

解決方案是不要將字符指針用於字符串,而應使用std::string類。


如果必須使用指針,則有兩種解決方案:將字符串聲明為數組,或使用new運算符分配內存。 但是請注意,如果輸入的內容超出分配的范圍,則會超出范圍,並再次出現未定義的行為

您尚未為char *str分配任何內存。 嘗試使用char str[20] (20只是一個示例,可以根據您的需求和計算機的性能進行選擇),一切都會很好。 您假設編譯器將為您分配內存,但事實並非如此。 您正在嘗試訪問未分配的內存,或者可以使用mallocnew動態分配它們。

除此之外,您還可以使用std::string從stl獲得幫助。

可以像char str[fixed_size]這樣聲明str或使用std :: string。 最簡單的方法之一可能是:

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {
    string str;
    cin >> str;
    reverse(str.begin(),str.end());
    cout <<str<< endl;
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM