2012-01-23 2 views
1

내가하고 싶은 것은 파일에서 행을 읽어서 문자열 배열에 집어 넣을 수 있다는 것입니다. 이것은 내가 지금까지 가지고 있지만 작동하지 않는 것입니다. 파일에서 행을 읽어 들여 문자열 배열에 넣기

... 
char line [128]; 
char file [10][128]; 

plist = fopen("plist1.txt", "r"); 

while(fgets(line, sizeof line, plist) != NULL){ 
    file[i][0]= line; 
    i++; 
} 

나는 file[i][0] = *line; 일을 시도하고 나는 각 행의 첫 번째 문자를 인쇄 할 수 있었다. 이것이 내가하려는 일을하는 가장 좋은 방법입니까?

또한, 텍스트 파일의 줄 수가 달라집니다 그래서 난 내 배열 가변 길이의 수 대신 10

편집하고 싶은 : 저는 두 솔루션은 다음과 같습니다 노력했다. 둘 다 strcpy 또는 fgets를 다루는 세분화 오류를 제공합니다.

1. while (fgets(file[i], sizeof(file[i]), plist)) 
     i++; 

2. while (fgets(line, sizeof(line), plist)){ 
     strcpy(file[i], line); 
     i++; 
    } 

답변

3

이 시도 : 또는

while (fgets(file[i], sizeof(file[i]), plist)) 
    i++; 

while (fgets(line, sizeof(line), plist)) 
    strcpy(file[i], line); 
+0

고마워요 !!! 나는 항상 포인터가 실제 값이 아닌 것을 잊는다 : /. 어리석은 오류가 항상 나를 잡아. – user972276

+0

잠깐, 작동하지 않습니다. 나에게 분할 오류가 발생합니다 – user972276

+0

@ user972276 내 마음이 피입니다. 디버거를 사용하십시오. – cnicutar

0
+0

나는 이것을 사용했다. 내 문제는 내 배열의 모든 요소가 가변 선을 가리킨 것입니다. 그래서 내 배열의 모든 요소는 같은 문자열을 가리켰다. 나는 이것이 첫 번째 논평까지 나의 문제라는 것을 깨닫지 못했다. 도와 줘서 고맙다! 그냥 바보 같은 오류가 ... – user972276

1

완벽하게 작동 솔루션입니다 제발 봐는 한 줄 한 줄의 텍스트가 들어 있습니다 . fgets() 기본적으로 마지막에 줄 바꿈을 포함하므로 제거해야합니다. 기호 상수를 사용하면 나중에 쉽게 변경할 수 있으므로 기호 상수를 사용하는 것도 좋은 생각입니다.

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

#define BUF 128 /* can change the buffer size as well */ 
#define TOT 10 /* change to accomodate other sizes, change ONCE here */ 

int main(void) { 
    char line[TOT][BUF]; 
    FILE *plist = NULL; 
    int i = 0; 
    int total = 0; 

    plist = fopen("plist1.txt", "r"); 
    while(fgets(line[i], BUF, plist)) { 
     /* get rid of ending \n from fgets */ 
     line[i][strlen(line[i]) - 1] = '\0'; 
     i++; 
    } 

    total = i; 

    for(i = 0; i < total; ++i) 
     printf("%s\n", line[i]); 

    return 0; 
} 
+0

나는 fgets에 문제가 있습니다. 세그먼트 오류가 발생했습니다. – user972276

+0

작업하고있는 plist1.txt를 게시 할 수 있습니까? 여기 내 것이 있습니다 : 안녕하세요 \ n 안녕하세요. \ n 안녕하세요. \ 테스트 – Ambidextrous

+0

@ user972276 TOT가 너무 큽니다. – echo

관련 문제