C 表达式必须是指向完整对象类型的指针?

C 表达式必须是指向完整对象类型的指针?,c,arrays,C,Arrays,我正在尝试对一系列结构进行更改。我的代码如下: typedef struct { char firstName[30]; char lastName[30]; char street[35]; char city[20]; char state[3]; int zip; char phone[15]; int accountId; } Customer; struct Customer customer_list[]; //vo

我正在尝试对一系列结构进行更改。我的代码如下:

typedef struct {
    char firstName[30];
    char lastName[30];
    char street[35];
    char city[20];
    char state[3];
    int zip;
    char phone[15];
    int accountId;
} Customer;

struct Customer customer_list[];

//void copy_first_name(char data[], int i) {
//  strcpy(customer_list[i].)

//}

int main(void) {

    int _zip, _accountId;
    char _firstName[30], _lastName[30], _street[35], _city[20], _state[3], _phone[15];

    for (int i = 0; i < 10; i++) {

        printf("Enter data for customer %d: \n", i);
        printf("Enter First Last Phone: ");
        scanf("%s%s%s", &_firstName, &_lastName, &_phone);

        printf("\nEnter Address (Street City State ZIP): ");
        scanf("%s%s%s%d", &_street, &_city, &_state, &_zip);

        strcpy(customer_list[i].firstName, _firstName);


    }

    return 0;
}
typedef结构{
charfirstname[30];
char lastName[30];
查街[35];;
查尔城[20];
半焦态[3];
int-zip;
字符电话[15];
国际帐户ID;
}顾客;
结构客户列表[];
//无效副本名称(字符数据[],整数i){
//strcpy(客户名单[i])
//}
内部主(空){
int _zip,_accountId;
姓名[30]、姓氏[30]、街道[35]、城市[20]、州[3]、电话[15];
对于(int i=0;i<10;i++){
printf(“输入客户%d:\n”,i)的数据;
printf(“输入First-Last Phone:”);
scanf(“%s%s%s”、&_firstName、&_lastName、&_phone);
printf(“\n输入地址(街道-城市-州邮政编码):”;
scanf(“%s%s%s%d”、&_街、&_市、&_州、&_邮编);
strcpy(客户列表[i].firstName,\u firstName);
}
返回0;
}
我在标题中得到了错误消息,指的是客户列表。有人能帮我吗

变化

struct Customer customer_list[];

或(不推荐,但作为语法示例)

在您的示例中,
Customer
是一个typedef,等于
struct{…}
。它不是命名结构

有些人喜欢这样做,但我不喜欢:

typedef struct Customer {
    char firstName[30];
    char lastName[30];
    char street[35];
    char city[20];
    char state[3];
    int zip;
    char phone[15];
    int accountId;
} Customer;

Customer customer_list[10];

如果他们这样做会更好:

typedef struct Customer_s {
    char firstName[30];
    char lastName[30];
    char street[35];
    char city[20];
    char state[3];
    int zip;
    char phone[15];
    int accountId;
} Customer;
现在很明显,
客户
客户
之间存在差异

Customer customer_list[10];


您在
struct
中有
[typedef][1]
,因此声明不需要
struct
关键字 简单地做

Customer customer_list[10];
够了

或者删除
typedef
并像这样声明
struct

struct Customer {
    char firstName[30];
    char lastName[30];
    char street[35];
    char city[20];
    char state[3];
    int zip;
    char phone[15];
    int accountId;
} ;

struct Customer customer_list[10];

您的
客户列表
数组没有大小。试着用10个元素来定义它。绝对是个好主意!但仍然不确定主要问题…实际上我只是做了那个更改,对于我的帖子中描述的问题没有任何影响。您没有类型
struct Customer
,因为您使用了
typedef
,仅限
Customer
。旁注:使用
scanf
时,不应引用
char
数组。取出那些符号(
&
),让编译器将数组转换为指针。
Customer customer_list[10];
struct Customer_s customer_list[10];
Customer customer_list[10];
struct Customer {
    char firstName[30];
    char lastName[30];
    char street[35];
    char city[20];
    char state[3];
    int zip;
    char phone[15];
    int accountId;
} ;

struct Customer customer_list[10];