C++ cin,Segment fault 11

kik*_*iki 3 c++ cin

当我输入字符串时,这给了我seg错误11.为什么我会遇到段故障?这很简单...... seg故障来自哪里?

int main(){
    char * str;
    printf ("please enter string : ");
    cin >> str;
    // reverse_str(str);   
}
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 5

您尚未分配任何内存str.所以你试图基本上写一个不能保存字符串的指针.从本质上讲,这会导致未定义的行为和seg错误.

解决方案是:
您应该使用std :: string而不是指针.

std::string str;
std::cout<<"please enter string :  ";
std::cin >>str;
Run Code Online (Sandbox Code Playgroud)

另外,尽量不要混合使用C和C++.在C++中
使用streams不是printf


或者,还有另外两种方法:

不太好其他方法1:
您可以通过将内存设置str为固定大小的数组来分配内存:

#define MAX_INPUT 256
char str[MAX_INPUT]={0};
Run Code Online (Sandbox Code Playgroud)

缺点:
这需要您知道用户在编译时可以输入的最大输入的长度,因为在C++中不允许使用可变长度数组.

不太好其他方法2:
您可以动态分配内存str使用new [].str在这种情况下将是一个指针.

#define MAX_INPUT 256
char *str = new char[MAX_INPUT];
Run Code Online (Sandbox Code Playgroud)

缺点:
这种方法同样具有在这种情况下知道在编译时分配多少内存的缺点,因为用户输入了字符串.此外,您需要记住通过调用delete[]或泄漏内存来解除分配.另外,尽量避免new在C++中尽可能多地使用.

结论:
此处的最佳解决方案是使用,std::string因为它可以避免上述所有问题.