我对在C ++中输入字符串感到困惑。
char str[4];
cin>>str;
cout<<str;
的工作原理。但是
char* str;
cin>>str;
cout<<str;
不起作用。 为什么呢?
答案 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
,并且列表会继续......
我可以在string
比char
更好地涉猎几个小时,或者我可以链接到其他答案:
答案 1 :(得分:0)
正如Jean-FrançoisFabre所说,你可以使用std::string
来实现你的目标。
如果您想使用纯C语法和char数组(在您的情况3中使用固定大小N),您可能会使用类似的东西:
#define N 3
char str[N + 1];
fgets(str, sizeof(str), stdin);
这可确保您不会遇到溢出。