繁体   English   中英

C ++,char *,分段错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM