2011-02-17 15 views
1

我有一個String類。最近,我發現可憐的東西無法處理:試圖編寫一個字符串構造函數來處理靜態char *,如「Hello World」

String string = "Hello World"; 

我立即決定通過添加一個構造函數來解決這個問題。然而,確切的參數令我困惑不解:

inline String(const char[] str) : Array(str, sizeof(str)/sizeof(char)) { } 

生成以下錯誤:「錯誤C2146:語法錯誤:標識符之前缺少‘)’‘海峽’」

我在想什麼就是因爲它的一個靜態char *文字,它並不意味着被傳遞給一個函數。但是,我實際上並不知道。

謝謝。 (爲了保證 - 傳遞給Array的任何數組都將被立即複製,而不是存儲)

+0

如果將簽名更改爲內聯字符串(char const * const str),它會工作嗎?或者只是內聯字符串(char * str)? – 2011-02-17 09:03:41

回答

4

最簡單的就是以const char*作爲參數。然後使用strlen查找字符串長度,然後使用new分配len+1個字符,並使用strncpy將字符串複製到新分配的內存。順便說一句,任何具體的原因不使用std::string

+0

我喜歡製作我自己的東西。 – 2011-02-17 09:10:30

+0

它適合學習的目的,對於生產代碼來說,重新發明輪子是沒有意義的。 – Asha 2011-02-17 09:12:33

0

你不需要使用sizeof(字符) - 按照C++的sizeof(char)的標準總是等於1

0

生成此特定錯誤,因爲方括號[]應該str去後,char後不。改變這一點,錯誤應該消失。

但是,我不認爲你的計算sizeof(str)/sizeof(char)將工作,因爲當一個數組被用作參數時,你會丟失關於字符串長度的信息。它只適用於使用原始數組的情況。您執行的計算將等於sizeof(char *)/sizeof(char),這不會反映字符串的大小。相反,像Asha說的那樣使用strlenstrcpy

相關問題