2017-09-16 2 views
0

먼저 다른 주제가 내 문제와 관련된 경우 미안하지만 적절한 문구에 도달 할 수 없습니다.C - fgets 및 모든 줄을 배열에 저장

나는 최대한 명확하게하려고 노력할 것입니다.

약 10 개의 텍스트 파일을 배열에 저장 한 다음 데이터를 처리해야하는 과정 프로젝트를 실현했습니다.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int* argc, char* argv[]){ 
    char* c = "./example.txt"; 
    char s[500]; 

    char* lignes[100]; 
    int sizeLignes = 0; 

    printf("%s \n\n", c); 

    FILE* myFile = NULL; 
    myFile = fopen(c, "r"); 

    if (myFile != NULL){ 
     int n; 
     while (fgets(s, 500, myFile) != NULL){ 
      printf("%d \n\n", sizeLignes); 
      lignes[sizeLignes] = s; 
      printf("%s", lignes[sizeLignes]); 
      sizeLignes++; 
     } 

     printf("%s", lignes[1]); 
     printf("%s", lignes[2]); 
     printf("%s", lignes[3]); 

    }else{ 
     printf("Wrong file"); 
    } 
    fclose(myFile); 
    return 0; 
} 

내의 var에 :

나는 모든 라인을 얻을 수는 fgets를 사용

, 그들은 내가 숯불 $ []

코드에들에게 "문자열을"통과 (치료는 문제가되지 않습니다) 좋은데, 모든 루프를 인쇄하면 좋다. 그리고 루프 안에 lignes[sizeLignes]을 인쇄하면 너무 좋습니다. 외부에 값을 인쇄하려고하면 넣습니다 ... 마지막 단어 4 개를 유지하는 것과 같습니다.

아이디어가 있으십니까?

추가 정보가 필요하십니까? 미리

감사

Izio

+0

문자열을 배열에 복사해야합니다. 당신은 단지's'에 대한 포인터를 배열에 저장하고 있으며 다음 루프 반복에서's'를 덮어 쓰게됩니다. – pstrjds

답변

0

대신 lignes [sizeLignes]가 S의 strcpy (lignes [sizeLignes, S)를 사용한다. 실제로 strcpy_s도 사용할 수 있습니다. 또한 문자열에 메모리를 할당해야합니다. 가 필요하지 될 때 그래서 나는 다음 코드를

lignes[sizeLignes] = malloc(500); 
strcpy(lignes[sizeLignes], s); 

무료 동적 메모리를 권장합니다.