2013-04-04 81 views
1

我在輸入「標題」和「作者」的行上出現錯誤。我不太確定該如何解決這個問題。枚舉數據和向量錯誤:表達式必須是可修改的左值

struct bookStruct 
{ 
    char title[40]; 
    char author[40]; 
    int pages; 
    int year; 
    }; 

    enum menu { display=1, add, end} ; 

    void displayOptions(); 
    void displayBooks(); 


int main(){ 

    vector<bookStruct> book(11); 
    string option; 

    book[0].title = "a"; 
    book[0].author = "b"; 
    book[0].pages = 23; 
    book[0].year = 21; 

    displayOptions(); 
    cin >> option; 

    displayBooks(book); 

    return 0; 
} 

回答

4

您不能分配到一個數組,你必須複製到它:

std::strcpy(book[0].title, "a"); 

但由於使用的是C++,我建議你使用std::string代替字符數組:

struct bookStruct 
{ 
    std::string title; 
    std::string author; 
    int pages; 
    int year; 
}; 

然後,您可以使用正常的任務,就像您現在要做的那樣。

+0

謝謝。我使用char數組的唯一原因是因爲這是賦值所指定的。 – user2105982 2013-04-04 11:00:39

+0

@ user2105982:如果您必須使用數組,請確保使用'strncpy',或者在複製之前自行檢查長度。如果你正在複製的字符串比目標數組長,那麼'strcpy'會壓遍所有內存,導致可怕的錯誤。 – 2013-04-04 11:39:14

+0

@MikeSeymour另一方面,'strncpy'可能不會添加終止的''\ 0''字符,所以它也很危險。 – 2013-04-04 11:41:08

相關問題