2010-07-13 11 views
2

배열의 인덱스를 시작 인덱스로 설정할 수 있습니까? 즉 파일에서 읽을 위치는 어디입니까? 버퍼가 프로세스에서 손상 될 수 있다면 두려웠습니다.배열 단위로 파일을 한 줄씩 읽습니다.

#include <stdio.h> 

int main() 
{ 
    FILE *f = fopen("C:\\dummy.txt", "rt"); 

    char lines[30]; //large enough array depending on file size 

    fpos_t index = 0; 

    while(fgets(&lines[index], 10, f)) //line limit is 10 characters 
    { 
     fgetpos (f, &index); 
    } 

    fclose(f); 
} 

답변

0

lines[index] 배열 lines의 index 번째 문자이다. 그것의 주소는 index'th 라인이 아니다.

특정 줄로 건너 뛰고 싶다면 5 줄을 읽으려면 5 줄을 읽고 4 줄을 읽고 아무 ​​것도하지 않으면 다음 줄을 읽고 무엇인가를하십시오.

파일 내의 특정 BYTE로 건너 뛰려면 fseek()를 사용하십시오.

또한 fgets에게 읽어주는 바이트 수 (10)가 라인을 (30)에 넣는 배열의 크기와 동일하므로주의해야합니다. 지금.

해당 행의 특정 문자로 시작하는 행의 일부를 읽어야하는 경우 전체 행을 읽은 다음 처음 이외의 다른 위치에서 시작하여 그 행을 선택해야합니다.

이 두 가지 예는 모두 웹 사이트 또는 라이브러리에서 문서의 일부를 요청하는 것과 같습니다. 즉, 페이지를 찢어 내지 않고 전체 문서를 가져오고, 필요.

0

아니요. 파일의 다른 위치로 이동하는 fseek라는 함수가 있습니다.

코드는 파일의 다른 부분을 읽는 대신 파일의 다른 부분으로 파일을 읽습니다.

1

할 수 있습니다,하지만 코드가 파일의 전체 내용을 읽으려고하기 때문에, 당신은 FREAD에 훨씬 더 직접 수행 할 수

당신이 정말로으로 라인을 읽고 싶다면 말했다
char lines[30]; 

// Will read as much of the file as can fit into lines: 
fread(lines, sizeof(*lines), sizeof(lines)/sizeof(*lines), f); 

줄을 바꿔 안전하게하면 fgets 행을 다음과 같이 변경해야합니다.

// As long as index < sizeof(lines), guaranteed not to overflow buffer 
fgets(&lines[index], sizeof(lines) - index, f); 
관련 문제