Del*_*lsa -4 c++ string pointers
我对在C++中输入字符串完全感到困惑.
char str[4];
cin>>str;
cout<<str;
Run Code Online (Sandbox Code Playgroud)
作品.但是
char* str;
cin>>str;
cout<<str;
Run Code Online (Sandbox Code Playgroud)
不起作用.为什么?
因为在第二种情况下,没有分配内存:你正在写入未定义的内存区域=> UB(可能是:SEGV)
你可以这样做str=new char[4];,但是如果你输入超过3个字符,你也会遇到缓冲区溢出问题,而且由于你无法控制用户输入的内容,你无法确保它不会发生.
(当然也可能发生在你的第一个工作案例中)
所以,既然你正在使用C++,我建议使用std::string这样的:
std::string str;
cin>>str;
cout<<str;
Run Code Online (Sandbox Code Playgroud)
没有更多char *或数组,没有更多的分配,内存泄漏......:真正的C++.当您想要与C函数接口时const char *,仍然可以使用对象的表示str.c_str().
你也可以连接这样的string对象:a + b,而不是可怕的strcat,并且列表继续......
我可以花几个小时讨论如何string更好char,或者我可以链接到其他答案: