2014-11-09 4 views
-2

fgets를 사용하여 문자열을 읽었습니다. 그것은 올바르게 인쇄하지만 내가 strlen 또는 NULL을 때까지 나쁜 값을 반환 때까지 사용하여 길이를 출력하려고하면. fgets는 문자열을 NULL로 끝내지 않습니까? 캐릭터 용fgets 후에 Strlen이 잘못된 결과를 출력합니다

char word[256]; 
fgets(word, sizeof(word), stdin); 
while(word[i]) 
    i++; 
printf("%d",i); 

는 40

+0

예 저는 0으로 설정되었습니다. 문제가되지 않습니다. – user3057352

+2

글쎄'strlen'도 문제가 아니에요, 당신에게 약속드립니다. 문제를 재현 할 수있는 컴파일 가능한 예제를 제공해야합니다. –

+0

다른 문자열을 입력하고 i의 출력 값을 확인해보십시오. 당신은 int i = 0;을 가지고 있습니까? – Gopi

답변

1

기능 fgets는 문자열의 개행 문자를 포함한다. 따라서 strlen 함수는이 기호를 계산합니다. 표준 C

2는 fgets 함수로부터

스트림이 배열 S에 의해 지시 으로 가리키는 스트림에서 n으로 지정 문자 수보다 많아야 하나 이하 읽는다. 개행 문자 (유지됨) 이후 또는 파일 끝 이후에 추가 문자를 읽지 않습니다. null 문자는 배열로 읽은 마지막 문자 바로 뒤에 쓰여집니다.

0

코드 아래 출력 ABA 적절한 값을 출력한다 :

int main() 
    { 
     char word[256]; 
     int i =0; 
     fgets(word, sizeof(word), stdin); 
     while(word[i]) 
      i++; 
     printf("%d\n",i); 
    } 
+0

'int i = 0;'OP 주장을 제외하면 OP와 어떻게 다른가요? –