2016-11-29 293 views
-1

我正在尝试对结构数组进行更改。我的代码如下:表达式必须是指向完整对象类型的指针吗?

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; 
} 

我在标题中看到错误消息,指的是customer_list。谁能帮我吗?

+0

你'customer_list'阵列没有大小。尝试用10个元素来定义它。 – paddy

+0

绝对是个好主意!仍然不知道主要问题,虽然... – Froobyflake

+0

我只是做了实际的变化,并没有对我在文章中描述的问题的影响。 – Froobyflake

回答

2

变化

struct Customer customer_list[]; 

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; 
} 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]; 

struct 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; 

现在很明显,CustomerCustomer_s之间有区别。

Customer customer_list[10]; 

struct Customer_s customer_list[10]; 
0

您在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]; 
相关问题