当我输入字符串时,这给了我seg错误11.为什么我会遇到段故障?这很简单...... seg故障来自哪里?
int main(){
char * str;
printf ("please enter string : ");
cin >> str;
// reverse_str(str);
}
Run Code Online (Sandbox Code Playgroud)
您尚未分配任何内存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因为它可以避免上述所有问题.