помочь с указателями и структурами и массивами в - PullRequest
0 голосов
/ 26 октября 2010

нужна помощь в распечатке массива указателей на структуры куда я иду не так? пожалуйста помогите

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 ]

2 голосов
/ 26 октября 2010

Где вы используете malloc, вы объявляете свой structperson как значение вместо указателя.Затем вы пытаетесь ссылаться на него как на указатель (т.е. разыменовывать его звездочкой).

Вот как я бы написал это .Я делаю ряд изменений, таких как удаление статической переменной var (вы должны обработать массив, которому вы ее назначаете, ваша функция не должна сохранять состояние массива, тогда никто другой не сможет его использовать).

0 голосов
/ 26 октября 2010

Множество проблем со стилем:

  • Не приводите возвращаемое значение malloc.
  • Вместо передачи sizeof(newperson) в malloc используйте sizeof *structperson.
  • Используйте оператор ->, т.е. structperson->name вместо (*structperson).name.
  • Очистите (вводя в заблуждение) имена, которые вы использовали для typedef и переменных.
  • Вместо HOW_MANY вы можете использовать sizeof names/sizeof names[0].
0 голосов
/ 26 октября 2010

Я хочу добавить данные к структурам, которые являются личными, а затем сделать массив указателей на человека, а затем распечатать их.В настоящее время я получаю вывод, который не читается, например, 11112012.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...