[英]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只是一個示例,可以根據您的需求和計算機的性能進行選擇),一切都會很好。 您假設編譯器將為您分配內存,但事實並非如此。 您正在嘗試訪問未分配的內存,或者可以使用malloc
或new
動態分配它們。
除此之外,您還可以使用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.