2012-01-05 61 views
0

當我編譯該代碼時,我得到「未聲明的標識符數據的使用」。正如你可以看到的問題是,add_student函數不能「看到」學生數組。在函數中使用未聲明的標識符

該怎麼做才能正常工作?

#include <stdio.h> 

typedef struct { 
    char *name; 
    int age; 
    char *sex; 
    int class; 
}student; 


void add_student(int, char*, int, char*, int); 

int main (int argc, const char * argv[]) 
{ 
    student data[5]; 

    add_student(5, "Mery", 3, "female", 8); 
    return 0; 
} 

void add_student(int sequence, char *name, int age, char *sex, int class) { 
    strcpy(data[sequence].name, name); 
    data[sequence].age[13]; 
    strcpy(data[sequence].sex, sex); 
    data[sequence].class[2]; 
} 

回答

1

解決這個問題的清潔方法是通過使data作爲附加參數add_student()

還有其他的錯誤,它使用索引到data

  1. 傳遞5作爲sequence值,然後;
  2. 使用strcpy()不正確,因爲您尚未爲namesex字段分配內存;
  3. 表達data[sequence].age[13]data[sequence].class[2]無效C.
+0

我已修復所有錯誤。謝謝 ! – summerc 2012-01-05 18:08:19

+0

有沒有一種更優雅的方式來分配名字和性別的記憶。這裏我是怎麼做的(對不起,但沒有找到格式化代碼的方法) data [sequence] .name = malloc(strlen(name)+ 1); < strcpy(data [sequence] .name,name); data [sequence] .age = age; data [sequence] .sex = malloc(strlen(sex)+ 1); strcpy(data [sequence] .sex,sex); data [sequence] .class = class; – summerc 2012-01-05 18:09:42

+0

@ user1074077:不,'malloc()'很好。還有'strdup()'。無論哪種情況,別忘了'free()'! – NPE 2012-01-05 18:11:16

0

data是在main()範圍,你想在add_student()範圍內使用它。您有兩種選擇:

  1. data放在全局範圍內,即將其聲明放在任何函數之外。
  2. 作爲參數通過dataadd_student()

我一般比較喜歡後者,但兩者都有用例。執行第一個選項將消除傳遞數組長度的需要,如果將它作爲參數傳入,則必須執行此操作。