C ++:通过char *获取字符串输入

时间:2016-12-31 09:36:56

标签: c++ string pointers

我对在C ++中输入字符串感到困惑。

char str[4];
cin>>str;
cout<<str;

的工作原理。但是

char* str;
cin>>str;
cout<<str;

不起作用。 为什么呢?

2 个答案:

答案 0 :(得分:6)

因为在第二种情况下,没有分配内存:你正在写入未定义的内存区域=&gt; UB(可能:SEGV)

你可以str=new char[4];,但是如果你输入超过3个字符,你也会遇到缓冲区溢出问题,并且由于你无法控制用户输入的内容,你无法确保它不会发生。< / p>

(当然也可能发生在你的第一个工作案例中)

所以,既然你正在使用C ++,我建议像这样使用std::string

std::string str;
cin>>str;
cout<<str;

不再有char *或数组,没有更多的分配,内存泄漏......:真正的C ++。当您想要与C函数接口时,仍然可以使用const char *获取对象的str.c_str()表示。

您还可以连接string这样的对象:a + b,而不是可怕的strcat,并且列表会继续......

我可以在stringchar更好地涉猎几个小时,或者我可以链接到其他答案:

答案 1 :(得分:0)

正如Jean-FrançoisFabre所说,你可以使用std::string来实现你的目标。

如果您想使用纯C语法和char数组(在您的情况3中使用固定大小N),您可能会使用类似的东西:

#define N 3
char str[N + 1];
fgets(str, sizeof(str), stdin);

这可确保您不会遇到溢出。