2010-10-26 60 views
0

幫助需要打印結構指針數組 我在哪裏出錯了?請幫助幫助指針和結構和數組在c

include <stdio.h> 
include <stdlib.h> 


define HOW_MANY 7 

char *names[HOW_MANY]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim", 
     "Harriet"}; 
int ages[HOW_MANY]= {22, 24, 106, 6, 18, 32, 24}; 


struct person 
{ 
    char *name; 
    int age; 
}; 


static void insert (struct person *people[], char *name, int age) { 
    static int nextfreeplace = 0; 


    typedef struct person newperson; 
    newperson *structperson = (newperson*)malloc(sizeof(newperson)); 
    (*structperson).name= name; 
    (*structperson).age = age; 
    printf("%s",(*structperson).name); 

    people[nextfreeplace] = &structperson; 
    printf("%s",(*people[nextfreeplace]).name); 

    nextfreeplace++; 
} 

int main(int argc, char **argv) { 


    struct person *people[HOW_MANY]; 

    for (int c=0; c < HOW_MANY;c++) { 
    insert (people, names[c], ages[c]); 
    } 

    print the people array here 
    for (int i=0; i < HOW_MANY;i++) { 
    printf("%s \n",&(*people[i]).name); 
    } 
    return 0; 
} 
+2

歡迎來到SO。請向我們提供更多信息,以幫助您解決問題。只是粘貼代碼是不夠的。 – 2010-10-26 16:18:11

回答

0

很多的風格問題:

  • 不要投malloc返回值。
  • 而不是通過sizeof(newperson)malloc,使用sizeof *structperson
  • 使用->算子,即structperson->name而不是(*structperson).name
  • 清理(用於混淆誤導)您用於typedef和變量的名稱。
  • 代替HOW_MANY,您可以使用sizeof names/sizeof names[0]
+0

感謝您的幫助:)對不起,這是我的第一個C程序之一 – learner123 2010-10-26 16:42:42

+0

沒問題 - 這些只是一些改進建議。 – 2010-10-26 16:51:34

0

我希望將數據添加到結構它們的人,然後讓指針指向人的數組,然後打印出來。目前我得到的輸出是不可讀e.g 11112012.

2

如果你malloc,你聲明你的structperson作爲一個值而不是一個指針。然後你嘗試從指針中引用它(即用星號將它解引用)。

Here is how I would write it。我做了一些改變,例如刪除靜態變量(你應該處理你指定它的數組,你的函數不應該存儲數組的狀態,那麼其他人都不能使用它)。