2013-08-30 2 views
0

문자열의 길이를 얻으려고하고 있지만 잘못된 값을 얻고 있습니다. 길이가 4 문자 밖에되지 않습니다. 왜 이런거야? sizeof()을 올바르게 사용하고 있습니까?잘못된 문자열 길이 얻기

#include <stdio.h> 

int main(void) 
{ 
    char *s; 
    int len; 

    s = "hello world"; 
    len = sizeof(s); 
    printf("%d\n", len); 
} 

답변

6

sizeof 연산자가 포인터 크기를 반환합니다. 문자열의 길이를 원하면 strlen 함수를 사용하십시오.

배열이 있어도 (예 : char s[] = "hello world") sizeof 연산자는 문자열 터미네이터 문자가 포함 된 배열의 길이를 반환하므로 잘못된 값을 반환합니다.

아, 그리고 문자열 포인터가 리터럴 문자열을 가리 키도록하려면 문자열 리터럴이 상수이므로 수정할 수 없으므로 const char *으로 선언해야합니다.

+0

'strlen'에 대해 문의 해 주셔서 감사합니다. –

1

s을 포인터로 선언했습니다. 포인터에 적용되면 sizeof()은 가리키는 요소의 크기가 아니라 포인터의 크기를 반환합니다. 시스템에서 포인터의 크기는 char으로 4 바이트가됩니다. 그러면 4가 출력으로 표시됩니다.

0

strlen() 외에도 문자열 리터럴을 문자 배열 char s[] = "hello world"에 할당 할 수 있습니다.이 경우 sizeof()는 바이트 단위의 배열 크기를 반환합니다. 이 특별한 경우 12에서, 문자열 끝에 \ 0 문자를위한 하나의 여분의 바이트.

sizeof()의 런타임 복잡성은 O (1)입니다.

strlen()의 복잡도는 O (n)입니다.

관련 문제