2017-09-16 5 views
-1

텍스트 파일이 있고 각 줄에는 사람 이름과 성별이 쉼표로 구분 된 값으로 들어 있습니다. 나는 한 줄씩 읽고 사람 배열을 만들려고 노력하고있다. 무엇이 잘못되었는지 내 코드와 함께 배열의 모든 요소는 텍스트 파일의 마지막 줄로 설정됩니다.파일을 줄 단위로 읽음 c 값을 마지막 항목으로 재설정

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

[C : char의 연결 목록 작성을위한 fgets 사용법] * (https://stackoverflow.com/questions/46243081/c-fgets-usage-for-building-a-linked-list- of-char) –

+0

두 번째 오늘 밤, 같은 문제. 많은, 많은 중복 :( –

답변

1

각 사람의 이름은 메모리에 같은 장소에 위치를 (마지막 줄은 샘, 남성이있는 경우, 그 사람의 배열의 모든 요소는 = 이름에 샘을 설정) : currentLine. 이 주소를 에 할당하면 모든 이름이 동일하게 표시됩니다. 각 Gender에 대한 비슷한 점.

currentLinereadAllFromFile에 국부적으로 있기 때문에 해당 함수가 반환되면 해당 공간이 다른 것들을 위해 사용되어 사용자가 보유한 Name을 삭제할 수 있습니다.

Person에는 NameGender에 대해 자체 할당이 필요합니다.