我想从命令行分配字符串。但我得到了分段错误。为什么?这是代码:
char* ans;
cout << "enter string: ";
cin >> *ans;
更新: 如果我不知道输入字符串的大小,如何提前分配内存, 它在String Class中的工作原理?
答案 0 :(得分:3)
您有一个指针,但该指针不指向为存储数据分配空间的任何位置。请改用std::string
:
std::string ans;
cout << "enter string: ";
cin >> ans;
// ...
ans.c_str(); // returns const char *
答案 1 :(得分:1)
因为您没有为ans
分配任何内存
这导致未定义的行为,其中用户输入的字符串被写入某个不属于您的变量ans
的内存,这会导致崩溃。
更好的方法是使用std::string
代替char *
。
std::string ans;
cout << "enter string: ";
cin >> ans;
答案 2 :(得分:0)
你需要分配内存来读取你的字符串 - 在你的代码中ans
是未初始化的,因此可能指向任何随机内存位置。这可能会导致崩溃。您是否有理由不想使用string
?
答案 3 :(得分:0)
char *ans;
定义指针,而不初始化它。指针只指向某个存储区域,它不会保留它。如果没有初始化它,你就无法取消引用它。
你需要做两件事:
分配一些存储空间。为此定义静态变量,或使用new
关键字使用动态存储。
使用此存储的地址初始化指针。
或者做得更好,根本不使用裸指针操作并使用std::string
来处理内存分配的所有细节。
答案 4 :(得分:0)
使用char*
,你试图写入你不拥有的内存,操作系统会在你的应用程序造成任何损害之前停止它。
相反,尝试类似:
#include <string>
std::string ans;
cout << "enter string: ";
cin >> ans;
const char* ans_str = ans.c_str();