71.8에서 sizeof(buffer)가 안되는 이유
, Unknown Lastname J님이 작성연습문제 71.8 https://dojang.io/mod/page/view.php?id=623 에서
count 변수를 사용하지 않고
fread(buffer, sizeof(buffer), 1, src);
printf("%s", buffer);
fwrite(buffer, sizeof(buffer), 1, dest);
memset(buffer, 0, 5);
라고 쓰고 실행하니
HelloFv`Fv
a, worFv`Fv
ald!
라는 쓰레기값(?)이 중간에 같이 나왔는데요, 이유가 무엇일까요?
fread에서 반환한 읽기횟수(=count)만큼 1바이트씩 fwrite를 실행하는 건 이해가 가는데, sizeof(buffer)로는 올바르게 실행되지 않는 이유가 궁금합니다. 제 생각엔 5바이트씩 읽어도 마지막에만 문제가 생기고 중간엔 오류가 나지 않을 것 같았거든요.
Re: 71.8에서 sizeof(buffer)가 안되는 이유
, 도장_ 관리자님이 작성UNIT 6 참고해서 각각의 라인에 중단점을 걸어서 실제 값을 살펴보면 이해가 빠를 겁니다.
buffer의 크기는 5바이트입니다.
UNIT 71.4 예제와 설명을 다시 학습하고, 71.4의 예제도 중단점을 찍어서 살펴보세요.
fread에서 1바이트를 읽고, printf에서는 %s로 buffer 전체를 출력하는 것도 맞지 않습니다.
코드를 고칠 것이라면 세심하게 주의를 기울여서 다 고쳐야 합니다.
1 문자씩 읽고 출력하고 싶다면 buffer 배열 전체가 아니라 %c로 문자 단위로 출력하고, buffer에서는 첫 번째 1칸만 쓰니까 buffer[0]만 출력해야 할 겁니다.
memset으로 전체를 초기화하는 것은 바람직합니다.