2012-10-08 3 views
-1

가능한 중복 : 나는 배열의 라인에 라인에 의해 텍스트 파일의 라인을 읽는 사투를 벌인거야
reading a text file into an array in cC에서 줄의 배열로 파일을 읽으려면 어떻게해야합니까?

. malloc이나 관련 명령을 사용할 수 없습니다. 내가 찾은 최신 코드는 작동하지 않는이 코드입니다.

void readfile(const char *filename) { 
FILE *f; 
f = fopen(filename, "r"); 
int linecount; 
char inputError; 
char a[500]; 
char array[50]; 
//struct cal_event one[200]; 

linecount = 0; 
while(inputError != EOF) { 
    inputError = fscanf(f, "%s\n", array); 
    linecount++; 
} 
fclose(f); 
char names[linecount][500]; 

f = fopen(filename, "r"); 
int i; 
for(i = 1; i < linecount; i++) 
    fscanf(f, "%s", names[i]); 
    printf("%s ", names[i]); 
fclose(f); 
} 

코드 예가 ​​필요합니다! 정말 고마워!

+0

동적 배열이 아닌 정적 배열 인 것 같습니다. –

답변

1
while(inputError != EOF) { 
    inputError = fscanf(f, "%s\n", array); 
    linecount++; 
} 

fscanf에 대한 귀하의 '대상'포인터는 모든 루프 반복에 대해 동일합니다. 즉, 각 반복은 이전 내용을 덮어 쓰면서 동일한 위치에 데이터를 씁니다. 버퍼 내용의 을 추적하고 버퍼 끝에 대한 포인터를 '대상'포인터로 사용해야합니다.

버퍼 내용의 끝을 추적하면 매우 중요한 작업을 수행 할 수 있다는 것을 의미합니다. 즉, 배열이 오버플로되지 않도록하십시오. 배열은 50 자로 하드 코딩되어 있기 때문에, 50자를 초과해서는 안됩니다. 그렇지 않으면 메모리가 손상되어 모든 종류의 나쁜 일이 발생할 수 있습니다.

제목에 따르면 파일을 배열로 읽어서 각 배열 요소가 문자열 (텍스트 줄을 나타냄)이되도록 할 것 같습니다. 문자열 자체는 배열이기 때문에 array 객체는 배열 배열이되어야합니다. 이것을 2 차원 배열이라고 부를 수도 있습니다. 예를 들어 :

char array[50][100]; 

이 각 라인의 길이는 최대 100 자까지 입력 할 수있는 텍스트의 50 개 라인을 보유 할 수있는 배열을 만들 것입니다. 그런 다음 첫 번째 줄을 array[0], 다음 줄을 array[1] 등으로 읽어들입니다.

관련 문제