我完全對C++中的字符串輸入感到困惑。C++:通過字符獲取字符串輸入*
char str[4];
cin>>str;
cout<<str;
工程。但
char* str;
cin>>str;
cout<<str;
不起作用。 爲什麼?
我完全對C++中的字符串輸入感到困惑。C++:通過字符獲取字符串輸入*
char str[4];
cin>>str;
cout<<str;
工程。但
char* str;
cin>>str;
cout<<str;
不起作用。 爲什麼?
正如Jean-FrançoisFabre所說,您可以使用std::string
來實現您的目標。
萬一你想用純C的語法和字符數組(具有固定大小N - 你的情況3),你可能與類似的東西去:
#define N 3
char str[N + 1];
fgets(str, sizeof(str), stdin);
這可以確保你贏了沒有遇到溢出。
因爲在第二種情況下,沒有內存分配:你寫未定義的內存區=> UB(可能是:SEGV)
你可以做str=new char[4];
,但如果你輸入3個以上的字符,你有緩衝區溢出問題,並且由於您無法控制用戶輸入的內容,因此無法確保不會發生。
(也可能發生在過程中的第一個工作的情況下)
所以,既然你用C++,我建議使用std::string
這樣的:
std::string str;
cin>>str;
cout<<str;
沒有更多char *
或數組,沒有更多的分配,內存泄漏......:真正的C++。當您想要與C函數接口時,仍然可以使用str.c_str()
獲取對象的const char *
表示。
您也可以連接string
對象是這樣的:a + b
,而不是可怕的strcat
,這樣的例子不勝枚舉和...
我可以涉足了幾個小時就string
如何比char
更好,或我可以鏈接到其他答案喜歡那些:
你的意思是'str = new char [4];'會解決我的問題嗎? – Delsa
將解決您的_immediate_問題。但請不要使用字符數組,你有C++的功能,使用它。 –
也許OP需要幾句話說明爲什麼std :: string更易於使用...... –
你的意思是說'str = new char [4];'問題就解決了。 – Delsa
是的,但你會有更多的問題,看到我的答案。 –