온라인을 둘러 보면 효율적인 메모리 할당 측면에서 fgets()
문자 포인터 배열 (char * restrict s ) 과 관련된 확실한 답을 아직 찾지 못했습니다 .
개요: char *fgets(char *restrict s, int n, FILE *restrict stream);
상기 찾고 fgets()
- 사양
이 스펙에 대한 나의 이해에서, 당신은 단순히 각 줄에 몇 개의 문자가 있는지 모르기 때문에 - 스펙에LINE_MAX
정의 된 매크로를 기반으로 할당해야합니다 .<limits.h>
실행 printf("LINE_MAX BYTES: %d\n", LINE_MAX);
하면 결과는 2048
입니다.
존재는, 선언 말했다 char *line[LINE_MAX]
- 또는 - char *line[2048]
나 비효율적으로 큰 것 같다, 그러나,이 그것을하는 최선의 방법이 될 수있다?
//프로그램
#include <stdio.h>
#include <limits.h>
int main(void){
char line[LINE_MAX];
FILE *fp = fopen("file.txt", "r");
while(fgets(line, LINE_MAX + 1, fp)){
printf("%s", line);
}
fclose(fp);
return(0);
}
//FILE(file.txt)
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
파일에 특별한 속성이없는 경우 LINE_MAX
바이트를 할당 하는 것이 가장 좋은 방법입니다. 일부 메모리를 낭비하고있을 수 있지만 자동 메모리 할당은 대부분의 최신 아키텍처에서 많은 하드웨어 지원과 함께 공간이 "할당"되는 것보다 "예약"되기 때문에 정말 저렴합니다.
반면에 파일 형식으로 인해 행이 특정 길이를 초과 할 수 없다는 것을 알고 있다면 대신 * 를 제한으로 MY_LINE
사용할 수 있습니다 .MY_LINE+2
char line[MY_LINE+2];
예를 들어, uuendode
형식으로 파일을 읽는 프로그램 은 한 줄에 최대 62자가 필요하므로 다음을 정의 할 수 있습니다.
#define MY_LINE 62
* UNIX에 있다고 가정하면 '\n'
및에 대한 공간이 필요 '\0'
하므로 +2
부분 이 필요합니다 . Windows를 사용하는 경우 추가 '\r'
문자 를 수용하려면 +3을 누르십시오 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다