2010-10-26 58 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。我做了一些改变,例如删除静态变量(你应该处理你指定它的数组,你的函数不应该存储数组的状态,那么其他人都不能使用它)。