[英]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.