2012-11-18 5 views
0

는 동일하지 않다 :fgets는 무엇을합니까?

fgets (answer, 256, stdin); 

if (strncmp(answer, "sta", 4) == 0) 
    printf("omg, it's equal"); 

이 코드는 다음과 같습니다

fgets (answer, 4, stdin); 

if (strncmp(answer, "sta", 4) == 0) 
    printf("omg, it's equal"); 

이유는 무엇입니까? 그것은 첫 번째 대답은 4 번째 장소에서 \ 0을 가지지 않기 때문입니다 (4 대신 3으로 변경하면 작동합니다). 하지만 fgets는 무엇을합니까? 첫 번째 문자열 대답은 str \whitespace*253\0"입니까? 그리고 두 번째로는 str\0입니까? 고맙습니다.

답변

4

fgets (gets과 달리)에는 줄 끝 부분에 눌러 진 반환에 해당하는 후행 \n이 포함됩니다. 3을 제한으로두면 문자열을 자르고 \n을 버립니다. 맨 페이지에서

:

fgets() 버퍼가 s가 가리키는 그들로 최대 스트림 크기의 문자보다 하나 적은 및 상점에서 읽습니다. EOF 또는 개행 후에 읽기가 중지됩니다. 개행을 읽으면, 버퍼에 저장됩니다. 버퍼가 인 마지막 문자 다음에 종료 널 바이트 ('\0')가 저장됩니다.