2016-11-12 29 views
-1

我有一個結構定義如下:如何SCANF到動態分配的結構INT

typedef struct { 
    char* name; 
    int* phone; 
} person; 

分配如下:

person* Person[numNames]; 
    for (i =0; i<numNames; i++) { 
     Person[i] = malloc(sizeof(person)); 
     Person[i]->name = malloc(25 * sizeof(char)); 
     Person[i]->phone = malloc(sizeof(int)); 
     memset(Person[i]->phone, 0, sizeof(int)); 
    } 

讀取輸入到手機這樣的:

for (i=0; i<numNames; i++) { 
    printf("%s: ", Person[i]->name); 
    scanf("%d", &Person[i]->phone); 
    } 

這給了我一個分段錯誤:(也釋放人[我] - >手機給我分段錯誤)

for (i =0; i<numNames; i++) { 
    printf("%s: %d", Person[i]->name, *Person[i]->phone); 
    } 

如何正確掃描到Person [i] - >手機沒有分段錯誤?

+0

爲什麼要爲單個「int」分配內存?並且假設電話號碼包含非數字,比如''+''? –

+1

刪除&在scanf中。它應該是scanf(「%d」,Person [i] - > phone); – MayurK

+0

注意:電話號碼由單個數字和特殊符號組成。兩者都是單個字符,符號不是整數,數字可以相鄰。那麼使用int數組而不是簡單的'char'數組的原因是什麼? – Olaf

回答