因此,在嘗試學習如何在C++中使用C-Strings時,我遇到了內存分配問題。我應該如何爲c字符串char數組分配內存?
這裏的想法是創建了一個新的字符串格式(s1 + sep + s2) 我正在使用的文本提供了標題,所以我無法更改,但我遇到了問題試圖設置char str []的大小。我得到一個錯誤,指出sLength不是常量,因此不能用於設置數組的大小。我對C++比較陌生,所以這是一個兩部分問題。
這個策略實際上是爲新陣列分配內存嗎?
如果我無法使用strlen(char *)得到一個常量值,我該如何正確設置數組大小?
char* concatStrings(char* s1, char* s2, char sep){ int sLength = strlen(s1) + strlen(s2) + 3; //+1 for char sep +2 for \0 at end of string char *str = new char[sLength]; strcpy (str, s1); str [sLength(s1)] = sep; strcat (str, s2); return str; }
編輯製作,所以現在我越來越沒有編譯器錯誤,但...
給函數的調用是在這裏:
char* str = concatStrings("Here is String one", "Here is String two" , c);
cout<< str;
我的輸出變爲:
Here is String onec ================== 22221/21/21/21/2/(etc.) /這裏是S tring two
您必須動態分配它。如果你是C++新手,我建議在查看C字符串之前堅持使用'std :: string'一段時間。不要選擇使用'std :: string'的C字符串,因爲存在各種問題。 – chris 2013-03-02 22:12:23
你會得到什麼編譯器錯誤? – 2013-03-02 22:13:45
@chris一般來說,我同意在C字符串上使用'std :: string'的建議。然而,OP明確指出這是一個學習練習,這是一個完全有效的理由(IMO)使用C字符串。 – 2013-03-02 22:14:41