繁体   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