我在使用C语言中的函数初始化结构时遇到问题,而我似乎无法在这里找到错误。以下是我的代码的相关部分:
struct Date
{
int nMonth;
int nDay;
int nYear;
};
struct Book
{
char szISBN[10];
char szTitle[75];
char szType[50];
char szPublisher[75];
int nPages;
float fPrice;
int nYearOfPub;
int nStatus;
char szHolder[50];
struct Date dueDate;
};
稍后,在我的一个职能中:
struct Book addNewBook(struct Book *pBooks, int nStock, struct tm *t)
{
char szISBN[10];
char szTitle[75];
char szType[50];
char szPublisher[75];
int nPages;
float fPrice;
int nYearOfPub;
int nStatus;
char szHolder[50];
struct Date dueDate = {t->tm_mon+1, t->tm_mday, t->tm_year+1900};//we will set this to be the current day by default
...
struct Book newBook = {*szISBN, *szTitle, *szType, *szPublisher, nPages, fPrice, nYearOfPub, nStatus, *szHolder, dueDate};
return newBook;
}
我一直看到这个非常简单的错误,似乎无法修复它。
error: incompatible types when initializing type 'char' using type 'struct Date'
除非我有阅读障碍,否则当我创建Book结构时,程序顶部的数据类型与我稍后在程序中初始化新书的位置相匹配。我在这里错过了什么?发生了什么事?
编辑:这是我使用的解决方案,感谢REACHUS链接另一个帮助我找到解决方案的问题。
struct Book addNewBook(struct Book *pBooks, int nStock, struct tm *t)
{
...
struct Book newBook = {"", "", "", "", nPages, fPrice, nYearOfPub, nStatus, "", dueDate};
strncpy(newBook.szISBN, szISBN, 10);
strncpy(newBook.szTitle, szTitle, 75);
strncpy(newBook.szType, szType, 50);
strncpy(newBook.szPublisher, szPublisher, 75);
strncpy(newBook.szHolder, szHolder, 50);
return newBook;
}
答案 0 :(得分:0)
*szHolder
相当于szHolder[0]
,因此这是char
。
与此相反,struct
字段char szHolder[50]
是一个数组。数组不能通过表达式初始化,它们必须需要{ .. something .. }
初始值设定项。这类似于无法分配数组的事实。
但是,如果这确实是你得到的诊断信息,那就不仅仅是神秘了。
答案 1 :(得分:0)
您可以按照this question的一个答案中描述的相同方式填充Book
struct
。