Файл читается построчно в c, сбрасывая значение до последней записи

У меня есть текстовый файл, и каждая строка содержит имя человека и пол в разделенных запятыми значениях. Я пытаюсь читать построчно и создавать массив людей. Не уверен, что пошло не так с моим кодом, все элементы массива установлены в последнюю строку текстового файла. (Если в последней строке указано Sam, Male, все элементы массива person установлены на Name=Sam)

  struct Person{
      char* Name;
      char* Gender;
  };
  struct Person person[100];

  void readAllFromFile(){
       FILE * fp;
       char currentLine[256];
       int fd;
       if((fp = fopen ("test.txt", "r"))==NULL){
           perror("Can not open");
          fclose(fp);
          return;
       }
       int currentLineNo=0;
       char *items;
       while (fgets(currentLine, sizeof(currentLine), fp)) {
           items=strtok(currentLine,",");
           struct Person tempPerson;
           int iter=0;
           while(items != NULL)
           {
              if(iter==0){
                  tempPerson.Name=items;
              }
               else {
                  tempPerson.Gender=items;
              }
             iter++;
             items=strtok(NULL,",");
          }
          person[currentLineNo]=tempPerson;
          currentLineNo++;
       }

       /*Printing element of the array*/
       int i;
       for(i=0;i<currentLineNo;i++){
       printf("%s\n",person[i].Name);
     }
    fclose(fp);
   }

  int main() {
     readAllFromFile();
     return 0;
  }

1 ответ

Имя каждого человека находится в одном и том же месте в памяти: currentLine, Вы назначаете этот адрес каждому Persons Name, поэтому каждое имя будет отображаться одинаково. Подобная вещь для каждого Gender,

Обратите внимание, что, потому что currentLine является локальным для readAllFromFileкак только эта функция вернется, это пространство может быть использовано для других вещей, уничтожая Name вам удалось сохранить.

каждый Person нуждается в собственном распределении пространства для его Name а также Gender,

Другие вопросы по тегам