2012-10-08 3 views
0

다음 코드는 a를 덮어 쓰는 것처럼 보이므로 입력 파일의 마지막 줄과 동일한 줄을 포함합니다. while 루프를 구조화하여 각 버퍼 라인을 배열의 개별 인스턴스에 저장하도록하려면 어떻게해야합니까?C : 어떻게 덮어 쓰지 않도록 line_buffer를 구성합니까?

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

while (fgets(line_buffer, sizeof(line_buffer), f)) { 
    ++line; 
    a[line] = (char*) &line_buffer; 
    //printf("%s ", a[line]); 
} 
int l; 
for(l=1; l<30; l++) { 
    printf("%s ", a[l]); 
} 
} 

답변

0

가장 좋은 방법은 각 라인에 대한 새로운 버퍼를 할당하고 a[line]에 주소를 할당 아마. 당신이 지금 가지고있는 1 오프셋에서

a[line++] = ... 

은 그래서 첫 번째 할당의 첫 번째 요소는 것을 대신 두 번째 요소의, 0 오프셋 : 아마 같아야 포인터를 할당

.

0

각 줄마다 공백을 할당해야합니다. 오류 검사 등을 제외하면 일반적으로 다음과 같습니다.

char buffer[max_line_len]; 
char *lines[max_lines]; 
size_t line=0; 

while (fgets(buffer, sizeof(buffer), f)) { 
    lines[line] = malloc(strlen(buffer)+1); 
    strcpy(lines[line], buffer); 
    ++line; 
} 
+0

malloc을 사용하지 않아도됩니다. –

+0

@ KimberleeGraham-Knight :이 경우'lines' (또는 원하는 이름은 무엇이든)을'char lines [max_lines] [max_length];와 같이 미리 할당하고 각 행을 그 안에있는 올바른 위치로 직접 읽어 들일 수 있습니다 . 쓰레기로 충분히 쓰이지는 않지만 그 외에는 잘 작동합니다. –

관련 문제