2013-08-30 3 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 в качестве вывода.

0

В дополнение к strlen() вы можете назначить строковый литерал массиву символов char s[] = "hello world", в этом случае sizeof() возвращает размер массива в байтах. В этом конкретном случае 12, один дополнительный байт для символа \ 0 в конце строки.

Сложность выполнения sizeof() равна O (1).

Сложность strlen() - O (n).

Смежные вопросы