문자열의 길이를 얻으려고하고 있지만 잘못된 값을 얻고 있습니다. 길이가 4 문자 밖에되지 않습니다. 왜 이런거야? sizeof()
을 올바르게 사용하고 있습니까?잘못된 문자열 길이 얻기
#include <stdio.h>
int main(void)
{
char *s;
int len;
s = "hello world";
len = sizeof(s);
printf("%d\n", len);
}
문자열의 길이를 얻으려고하고 있지만 잘못된 값을 얻고 있습니다. 길이가 4 문자 밖에되지 않습니다. 왜 이런거야? sizeof()
을 올바르게 사용하고 있습니까?잘못된 문자열 길이 얻기
#include <stdio.h>
int main(void)
{
char *s;
int len;
s = "hello world";
len = sizeof(s);
printf("%d\n", len);
}
sizeof
연산자가 포인터 크기를 반환합니다. 문자열의 길이를 원하면 strlen
함수를 사용하십시오.
배열이 있어도 (예 : char s[] = "hello world"
) sizeof
연산자는 문자열 터미네이터 문자가 포함 된 배열의 길이를 반환하므로 잘못된 값을 반환합니다.
아, 그리고 문자열 포인터가 리터럴 문자열을 가리 키도록하려면 문자열 리터럴이 상수이므로 수정할 수 없으므로 const char *
으로 선언해야합니다.
s
을 포인터로 선언했습니다. 포인터에 적용되면 sizeof()
은 가리키는 요소의 크기가 아니라 포인터의 크기를 반환합니다. 시스템에서 포인터의 크기는 char
으로 4 바이트가됩니다. 그러면 4가 출력으로 표시됩니다.
strlen() 외에도 문자열 리터럴을 문자 배열 char s[] = "hello world"
에 할당 할 수 있습니다.이 경우 sizeof()는 바이트 단위의 배열 크기를 반환합니다. 이 특별한 경우 12에서, 문자열 끝에 \ 0 문자를위한 하나의 여분의 바이트.
sizeof()의 런타임 복잡성은 O (1)입니다.
strlen()의 복잡도는 O (n)입니다.
'strlen'에 대해 문의 해 주셔서 감사합니다. –