2014-07-26 4 views
-3

strlen() 함수를 사용하여 아래 표시된 것처럼 문자열의 크기를 인쇄하고 있습니다.strlen() 출력이 올바르지 않습니다.

int main() 

{ 

char c[]={1,2,3,4,5}; //same output if c[5]={1,2,3,4,5} 

printf("Length of string C is %d", strlen(c)); 


return 0; 
} 

출력

 
Length of string C is 19 

왜 19를 인쇄?

+5

배열에 널 종결자가 없으므로 strlen이 초기화되지 않은 메모리로 들어갑니다. –

+0

@ 짐 로데스는 널 종결자를 넣지 않았다고 말했습니다. 나는 또한 코드의이 부분을 이해하지 못한다 : if c [5] = {1,2,3,4,5}. 당신이 얻고 싶은 것을 설명해 주시겠습니까? – Filo

+2

@Filo OP는 선언문'char c [5] = {1,2,3,4,5}; '와 함께 출력이 동일하다고 말합니다. –

답변

6

C에서 문자열은 특수 문자 '\0' (ASCII : 0)로 끝나는 문자 배열입니다.

char c[]={1,2,3,4,5};은 문자 배열입니다.

, 그것이 문자열 만들기, 0로 즉 char c[]={1,2,3,4,5,0}; 또는 마지막 값을 제공하는 것이 더 char c[]={1,2,3,4,5, '\0'};

, 그것은 '\0' 터미네이터를 검색하여 문자열의 끝을 발견하기 때문에 이제 strlen 작동하지 않았다 당신을 당신의 배열에서 주저하지 않았습니다.

계속해서 '\0'을 검색합니다 (그리고 정의되지 않은 동작이며 때로는 매우 나쁨). 그것은 19 번째 등장 인물에서 행운을 빕니다. 따라서 그 결과를 돌려줍니다.

관련 문제