줄 바꿈 문자의 위치가 문자열로 이어지는 문자열이 인쇄되지 않는 이유는 무엇입니까?

제니 젠킨스

소켓 프로그래밍이 처음입니다. 수신자를위한 코드를 작성했습니다.

#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<netinet/ip.h>
#include<string.h>
#include<unistd.h>

 int main()
{int ret= socket(AF_INET,SOCK_DGRAM,0);
  if (ret==-1)
   {printf("\nsocket creation fails");
    exit (0);}
  else
   printf("\nsocket creation succeeds");

 struct sockaddr_in sender;
 int port;
 printf("\nEnter port:");
 scanf("%d",&port);
 sender.sin_family= AF_INET;
 sender.sin_port=htons(port);
 sender.sin_addr.s_addr=INADDR_ANY;

 int ret1;
 ret1= bind(ret,(struct sockaddr *)&sender,sizeof(sender));

 if(ret1==-1)
 {printf("\nsocket binding fails");
  exit (0);}
 else
 printf("\nsocket binding succeeds");

 struct sockaddr_in receiver;
 char str[15]; 
 int addrlen=sizeof(receiver);

 while(1)
 {int rec=recvfrom(ret,str,sizeof(str),0,(struct sockaddr*)&receiver,&addrlen);
  printf("\nreceived");
  str[rec]='\0';
  if(strcmp(str,"exit")==0)
  break;

  if (rec==-1)
  {printf("\nrecvfrom fails");
  exit (0);}

  else
  {printf("\nrecv succeeds");
   printf("\n%s",str);}
  }

  close(ret);
  return 0;
  }

이 코드의 출력 은 다음 줄에 인쇄되고 receivedrecv succeeds후에 커서는 다음 줄로 이동하지만 str은 인쇄하지 않습니다. 그러나 다음 반복에서는 이전 str 값이 received이전에 인쇄 recv succeeds됩니다. 내가 사용하면이 문제는 해결되었다 printf("%s\n",str)대신 printf("\n%s",str). 왜 이런 일이 발생합니까?

에릭 포스트 피쉴

표준 출력 스트림 stdout은 일반적으로 터미널로 전달 될 때 라인 버퍼링됩니다. C 2018 7.21.3 3 :

… 스트림이 라인 버퍼링 될 때 , 문자는 개행 문자가 발견 될 때 블록으로 호스트 환경으로 또는 호스트 환경에서 전송되도록 의도됩니다. 또한 문자는 버퍼가 채워 졌을 때, 버퍼링되지 않은 스트림에서 입력이 요청 될 때 또는 호스트 환경에서 문자를 전송해야하는 라인 버퍼 된 스트림에서 입력이 요청 될 때 호스트 환경에 블록으로 전송되도록되어 있습니다. …

따라서 개행 문자 뒤의 문자는 개행 문자가 기록되거나 scanf연결된 입력 스트림에서 입력 을 요청할 때까지 (출력 장치에 표시되지 않는 컴퓨터 메모리 내부) 버퍼에 남아 있습니다. 명시 적으로 버퍼 비우기를 요청하거나 버퍼가 채워질 정도로 너무 많이 기록됩니다.

이런 이유로 printf처음에 개행 문자를 사용하여 명령문 을 작성하는 것은 좋지 않습니다 "\nrecv succeeds". C는 .NET과 같은 일반적인 응용 프로그램의 줄 끝에 줄 바꿈 문자가있는 출력용으로 설계되었습니다 "recv succeeds\n".

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

줄 바꿈이 문자열로 작성되는 이유는 무엇입니까?

분류에서Dev

줄 바꿈이 문자열로 작성되는 이유는 무엇입니까?

분류에서Dev

문자열이 끊어지지 않아도 td 문자를 줄 바꿈하는 방법은 무엇입니까?

분류에서Dev

내 문자열의 첫 글자가 인쇄되지 않는 이유는 무엇입니까?

분류에서Dev

JLabel에서 문자열이 인쇄되지 않는 이유는 무엇입니까? (자바)

분류에서Dev

문자열 내의 문자 바꾸기-함수가 작동하지 않는 이유는 무엇입니까?

분류에서Dev

올바른 위치에 올바른 문자열을 추가하지 않는 이유는 무엇입니까?

분류에서Dev

내 문자열의 첫 글자가 C로 인쇄되지 않는 이유가 확실하지 않습니까?

분류에서Dev

Rubymine의 문자열을 줄 바꿈이있는 문자열로 바꾸기

분류에서Dev

내 C 프로그램이 올바른 문자열을 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

내 C 프로그램이 올바른 문자열을 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

두 줄 바꿈까지 문자열을 일치시키는 방법은 무엇입니까?

분류에서Dev

Java에서 명령 줄 인수가 문자열 배열로 전달되는 이유는 무엇입니까?

분류에서Dev

생성자에 문자열에 대한 참조가있을 때 올바르게 인쇄되지 않는 이유는 무엇입니까?

분류에서Dev

파이썬은 줄 바꿈이 문자열에 있는지 찾습니다.

분류에서Dev

이 Python 스크립트의 문자열에서 11이 인쇄되지 않는 이유는 무엇입니까?

분류에서Dev

이 문자열이 일치하지 않는 이유는 무엇입니까?

분류에서Dev

문자열의 문자가 계산되지 않는 이유는 무엇입니까?

분류에서Dev

내 strcpy ()가 전체 문자열을 덮어 쓰지 않고 마지막 문자 []의 문자를 유지하지 않는 이유는 무엇입니까?

분류에서Dev

다음 줄임표 / 자르기 함수가 문자열을 같은 길이로 자르지 않는 이유는 무엇입니까?

분류에서Dev

내 문자열이 사용 가능한 범위로 변환되지 않는 이유는 무엇입니까?

분류에서Dev

자바 스크립트 : 숫자가 문자열로 취급되는 이유는 무엇입니까?

분류에서Dev

자바 스크립트 : 숫자가 문자열로 취급되는 이유는 무엇입니까?

분류에서Dev

Windows 배치 파일의 줄 바꿈으로 인해 괄호가 인식되지 않는 이유는 무엇입니까?

분류에서Dev

C ++ 17 문자 클래스 [: blank :]가 줄 바꿈 및 캐리지 리턴과 일치하는 이유는 무엇입니까?

분류에서Dev

Javascript에서 HTML 요소를 줄 바꿈하지 않고 문자열에서 첫 단어를 줄 바꿈하는 방법은 무엇입니까?

분류에서Dev

이 함수가 문자열 s의 모든 부분 문자열을 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

re.sub가 문자열을 빈 문자열로 바꾸지 않는 이유

분류에서Dev

Java의 문자열 관련 문제 : 레벨 승격 / 다운 그레이드가 올바르게 업데이트되지 않는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    줄 바꿈이 문자열로 작성되는 이유는 무엇입니까?

  2. 2

    줄 바꿈이 문자열로 작성되는 이유는 무엇입니까?

  3. 3

    문자열이 끊어지지 않아도 td 문자를 줄 바꿈하는 방법은 무엇입니까?

  4. 4

    내 문자열의 첫 글자가 인쇄되지 않는 이유는 무엇입니까?

  5. 5

    JLabel에서 문자열이 인쇄되지 않는 이유는 무엇입니까? (자바)

  6. 6

    문자열 내의 문자 바꾸기-함수가 작동하지 않는 이유는 무엇입니까?

  7. 7

    올바른 위치에 올바른 문자열을 추가하지 않는 이유는 무엇입니까?

  8. 8

    내 문자열의 첫 글자가 C로 인쇄되지 않는 이유가 확실하지 않습니까?

  9. 9

    Rubymine의 문자열을 줄 바꿈이있는 문자열로 바꾸기

  10. 10

    내 C 프로그램이 올바른 문자열을 인쇄하지 않는 이유는 무엇입니까?

  11. 11

    내 C 프로그램이 올바른 문자열을 인쇄하지 않는 이유는 무엇입니까?

  12. 12

    두 줄 바꿈까지 문자열을 일치시키는 방법은 무엇입니까?

  13. 13

    Java에서 명령 줄 인수가 문자열 배열로 전달되는 이유는 무엇입니까?

  14. 14

    생성자에 문자열에 대한 참조가있을 때 올바르게 인쇄되지 않는 이유는 무엇입니까?

  15. 15

    파이썬은 줄 바꿈이 문자열에 있는지 찾습니다.

  16. 16

    이 Python 스크립트의 문자열에서 11이 인쇄되지 않는 이유는 무엇입니까?

  17. 17

    이 문자열이 일치하지 않는 이유는 무엇입니까?

  18. 18

    문자열의 문자가 계산되지 않는 이유는 무엇입니까?

  19. 19

    내 strcpy ()가 전체 문자열을 덮어 쓰지 않고 마지막 문자 []의 문자를 유지하지 않는 이유는 무엇입니까?

  20. 20

    다음 줄임표 / 자르기 함수가 문자열을 같은 길이로 자르지 않는 이유는 무엇입니까?

  21. 21

    내 문자열이 사용 가능한 범위로 변환되지 않는 이유는 무엇입니까?

  22. 22

    자바 스크립트 : 숫자가 문자열로 취급되는 이유는 무엇입니까?

  23. 23

    자바 스크립트 : 숫자가 문자열로 취급되는 이유는 무엇입니까?

  24. 24

    Windows 배치 파일의 줄 바꿈으로 인해 괄호가 인식되지 않는 이유는 무엇입니까?

  25. 25

    C ++ 17 문자 클래스 [: blank :]가 줄 바꿈 및 캐리지 리턴과 일치하는 이유는 무엇입니까?

  26. 26

    Javascript에서 HTML 요소를 줄 바꿈하지 않고 문자열에서 첫 단어를 줄 바꿈하는 방법은 무엇입니까?

  27. 27

    이 함수가 문자열 s의 모든 부분 문자열을 인쇄하지 않는 이유는 무엇입니까?

  28. 28

    re.sub가 문자열을 빈 문자열로 바꾸지 않는 이유

  29. 29

    Java의 문자열 관련 문제 : 레벨 승격 / 다운 그레이드가 올바르게 업데이트되지 않는 이유는 무엇입니까?

뜨겁다태그

보관