[英]C++, char*, segmentation fault
我想从命令行分配字符串。 但是我遇到了细分错误。 为什么? 这是代码:
char* ans;
cout << "enter string: ";
cin >> *ans;
更新:如果我不知道输入字符串的大小,如何提前分配内存,它在字符串类中如何工作?
您有一个指针,但是该指针不会指向为存储数据分配空间的任何地方。 使用std::string
代替:
std::string ans;
cout << "enter string: ";
cin >> ans;
// ...
ans.c_str(); // returns const char *
因为您没有为ans
分配任何内存。
这将导致未定义的行为 ,其中用户输入的字符串被写入不属于您的变量ans
某些内存,这将导致崩溃。 更好的方法是使用std::string
代替char *
。
std::string ans;
cout << "enter string: ";
cin >> ans;
您需要分配内存以将您的字符串读入-在您的代码中ans
未初始化,因此可能指向任何随机的内存位置。 这很可能导致崩溃。 您是否有不想使用string
的原因?
char *ans;
定义一个指针,而不初始化它。 指针仅指向某个存储区域,而不保存该区域。 而且,如果不对其进行初始化,则无处可以取消引用它。
您需要做两件事:
分配一些存储空间。 为此定义一个静态变量,或者使用new
关键字使用动态存储。
使用此存储的地址初始化指针。
或者做更好的事情,根本不要用裸指针操作,而要使用std::string
,它将处理所有内存分配细节。
通过使用char*
您试图写入您不拥有的内存,并且OS会停止您的应用程序,以免造成任何损害。
相反,请尝试如下操作:
#include <string>
std::string ans;
cout << "enter string: ";
cin >> ans;
const char* ans_str = ans.c_str();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.