2013-04-04 100 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

相关问题