#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *buffer = malloc(100); memset(buffer, 0, 100); FILE *fp = fopen("words.txt", "r"); ___________________ printf("%s\n", buffer); fclose(fp); free(buffer); return 0; }여기서 빈칸에 값을
fread(buffer,100,1,fp); 로 직접 100을 부여 하면 정상적으로 출력되나
fread(buffer,sizeof(buffer),1,fp); 를 실행시 This 까지밖에 출력이 되질 않습니다. 왜 그런가요? malloc(100)을 buffer 에 이미 부여했는데 그럼 buffer 는 100바이트 크기 상태이지 않나요?
fread의 두 번째 인자는 읽어올 크기를 지정합니다.
buffer에 할당한 100을 할당하면 할당된 공간 전체를 읽어오는 것입니다.
다만, 문자열의 끝은 널 문자이므로 널 문자까지 출력하게 되니까 문자열 데이터가 20바이트면 20바이트까지 출력하게 됩니다.(널 문자는 출력 안 됨)
sizeof(buffer)이면 buffer 포인터의 크기만큼 읽어오게 됩니다. 이 값이 4이면 4바이트만 읽어오라고 코드를 작성한 것이니까 This만 읽어오고 출력되는 게 맞습니다.
buffer 의 크기가 왜 4로 지정 되었는지 잘 모르겠습니다...
그리고 그렇다면 fread 의 두번째 인자 에는 어떤 식을 사용하여야 남기는 공간 없이 딱 원하는 만큼만 지정 해서 가져올수 있나요?
size = 100으로 지정했으면 size 변수를 이용하거나 할당한 100을 계속 쓰면 됩니다.
sizeof( buffer )는 buffer 포인터의 크기이므로 32비트 환경이면 4, 64비트 환경이면 8입니다. 올바른 길이 지정이 아니니까 4바이트만 읽은 겁니다.
해당 UNIT을 복습하고, 이전 내용을 복습하는 게 필요해보입니다.
한 번에 다 이해하려 하지 말고 3회독 정도 하세요.