C ++,char *,分段错误

时间:2011-12-26 18:26:52

标签: c++

我想从命令行分配字符串。但我得到了分段错误。为什么?这是代码:

char* ans;  
cout << "enter string: ";  
cin >> *ans;

更新: 如果我不知道输入字符串的大小,如何提前分配内存, 它在String Class中的工作原理?

5 个答案:

答案 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();