인프런 커뮤니티 질문&답변
출력값이 이상합니다
작성
·
185
0
아래의 source code에서 txt 내용과 출력 결과가 다릅니다
어떤 이유인지 알 수 있을까요?
[input .txt 내용]
I love asd I love qwe hello world!
[출력 결과]
00000000000000000000000000000000
I love asd
I love qwe
hello wowo
[source code]
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { FILE* fp; int ch; /* setvbuf() */ fp = fopen("input.txt", "r"); char buffer[32] = { '\0', }; setvbuf(fp, buffer, _IOFBF, sizeof(buffer)); for (int i = 0; i < sizeof(buffer); ++i) printf("%hhd", buffer[i]); printf("\n"); ch = fgetc(fp); for (int i = 0; i < sizeof(buffer); ++i) printf("%c", buffer[i]); printf("\n"); fclose(fp); return 0; }
퀴즈
`fopen` 함수 사용 시, 파일 모드 "w"와 "a"의 가장 큰 차이점은 무엇일까요?
"w"는 파일을 읽기 전용으로 열고, "a"는 쓰기 전용으로 엽니다.
"w"는 파일이 없으면 오류를 반환하고, "a"는 파일을 새로 생성합니다.
"w"는 기존 내용을 지우고 쓰고, "a"는 기존 내용 뒤에 추가합니다.
"w"는 텍스트 모드이고, "a"는 바이너리 모드입니다.
답변 1
0
안녕하세요! :)
코드 이렇게 주시면 보기가 쪼끔 힘들어용 ㅠ.ㅠ
링크에 따르면 setvbuf 는 문자 입력해주는 함수가 아니라 버퍼링 방식을 변경해주는 그런 함수입니다.
따라서
이 시점에선 buffer 가 비어있습니다. 전부 \0 ..
이때 hhd 정수로 출력하니 전부 0 이 나오는 것입니다.
buffer 에 txt 의 문자들이 입력되는건 fgetc 에서입니다.





