在c中帮助指针和结构和数组

时间:2010-10-26 16:14:55

标签: c struct

帮助需要打印指向结构的指针数组 我哪里错了?请帮忙

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

3 个答案:

答案 0 :(得分:2)

在malloc中,您将结构体声明为值而不是指针。然后你尝试从那时起引用它作为指针(即用星号取消引用它)。

Here is how I would write it。我进行了一些更改,例如删除静态var(你应该处理你分配它的数组,你的函数不应该存储数组的状态,然后没有其他人可以使用它)。

答案 1 :(得分:0)

我想将数据添加到人物结构中,然后创建一个指向该人的指针数组,然后将其打印出来。目前我得到的输出是不可读的,例如11112012。

答案 2 :(得分:0)

很多风格问题:

  • 请勿转换malloc
  • 的返回值
  • 使用sizeof(newperson)
  • ,而不是将malloc传递给sizeof *structperson
  • 使用->运算符,即structperson->name代替(*structperson).name
  • 清理您用于typedef和变量的(混淆误导性)名称。
  • 您可以使用HOW_MANY
  • 代替sizeof names/sizeof names[0]