2011-06-19 47 views
0

我有這樣的事情:如何將字符數組複製到結構的成員?

struct cd { char name; cd *next;} 

// some code... 

int main(){ 
char title[100]; 

// some code... 

cd *p =new cd; 
p->name=title; 

如何複製數組titlep->name

+1

只是爲了澄清這個......你要存儲一個字符串一個鏈接的字符列表? –

+1

除非你輸錯,'P-> name'是一個char,'title'字符數組,所以它不可能 – Saphrosit

+0

居然還有經鏈接列表與玉米粥更多的結構成員 \t'焦炭行爲;' \t'焦維和行動; ' \t'char name;' \t'cd * next;'和main()函數讀取數組中的文本中的文本,我需要將其複製到結構成員中。也許我錯了'char name;'如果可能的話應該改爲'char name [100]'? – Matiss

回答

1

在你的結構你需要一個字符指針,而不是單個字符:

struct cd { 
    char * name; 
    cd *next; 
} 

這樣,您的最終代碼將變爲:

int main(int argc, char * argv[]) { 
    char title[256]; 

    // code 

    struct cd * p = new cd; 
    p->name = new char[256]; 
    strcpy(p->name, title); 
} 

注意,這是純粹的Ç(除從新的,可以被malloc()取代而不是C++)。

+0

在複製之前分配空間是個好主意 –

+1

這也是因爲'strcpy'會試圖寫入未分配的內存; 'p-> name'未初始化。你可以通過使用'strdup'來修復(並簡化)。 –

+0

你確定嗎?純「C」中的「新」? strcpy到未分配的內存? – Andrei

5

如果使用std::string,這得到簡單:

struct cd { std::string name; cd *next; }; 

int main() { 
    // blah 
    p->name = title; 
} 

但是你可以做得比這更好。在C++中,你可以用一個構造函數初始化對象:

struct cd { 
    cd(std::string newname) : name(newname), next() {} 

    std::string name; 
    cd *next; 
}; 

int main() { 
    // blah 
    cd p(title); // initializes a new cd with title as the name 
} 

如果構造是不可取的,你可以使用集合初始化:

struct cd { 
    std::string name; 
    cd *next; 
}; 

int main() { 
    // blah 
    cd p = { title, NULL }; // initializes a new cd with title as the name 
          // and next as a null pointer 
} 
+0

'+ 1'從我這裏回答它作爲它被標記爲C++的問題。但是,實際上,這個呼聲要求一個答案來解釋什麼是... – sbi

+0

比我的好得多:P +1 –

+0

另外,保持結構簡單的聚合並初始化它:'cd p = {「hello」, ...};'。有時它不需要任何自定義構造函數。 –

相關問題