이상한 코딩 나라의 혜돌이
[C] printf, write 함수에 대해서 본문
소켓에서 읽어온 메시지를 write 함수로 출력하고 이어서 printf 함수를 썼을 때 출력 시점과 모양이 이상하게 되는(?) 문제가 발생했다.
write = write(1, buf, read);
...
printf("\nInput Word: ");
실제 출력해보면 개행이 사라지는 등 이상한 .... 현상이 생겼다.
교수님께 여쭤보니, stdout에 출력할 때 write 함수와 printf 함수를 섞어서 사용했기 때문에 발생한 문제라고 하셨다.
또 추가로 찾아보니 write 함수는 버퍼에 있는 내용을 그대로 출력하고 printf 함수는 표준 출력 모드로 동작하여 종료 문자('\n', '\0')를 만났을 때 내용을 출력한다고 한다.
문제를 해결하기 위해서는,
- printf 또는 write 함수 중 하나로 통일해서 사용 (권장)
순서나 출력 모양이 꼬이지 않도록 함수 자체를 통일하면 쓸데없는 문제가 생기지 않음
- printf 함수 사용 후에 flush(stdout);으로 버퍼를 비워줌
printf 함수를 쓴 다음 버퍼를 비워줌으로써 종료 문자를 만나지 않았더라도 내용을 바로 출력하도록 함
이 두 방법 중 하나를 사용하면 된다.
-
소켓 프로그래밍 하느라 넘넘 고생중이었는데...
교수님이 엄청 엄청 엄청 엄청 엄청 도와주시고 떠먹여주시고 ...
교수님은 천사에다 천재가 분명하다
흑흑흑 감사해요 교수님 ...
'Study > Troubleshooting' 카테고리의 다른 글
[Raspberry Pi 3/Network] 라즈베리 파이 3 무선랜(WiFi) 설정이 안 될때 (0) | 2019.03.21 |
---|---|
[JAVA/Spring boot] Intellij에서 gradle로 프로젝트를 할 때 mavenBom을 인식하지 못하는 문제 (0) | 2018.12.18 |
[C] 소켓 서버를 돌릴 때 발생하는 bind error (0) | 2018.12.03 |
[AWS] EC2 ssh 접속 시 Permission denied 현상 (3) | 2018.09.17 |
[Linux] make 명령어에서 clean의 dependency list에 대한 의문 (0) | 2018.09.13 |
Comments