strlen в C/C++: длинна строки

👋 Привет! В этой статье мы поговорим о функции strlen. Эта функция подсчитывает количество символов в Си-строке. В начале мы рассмотрим несколько примеров использования этой функции, затем реализуем её сами, а в конце вы найдете упражнения для закрепления материала.

Иллюстрация strlen

Как получить количество символов в языке C/C++

Для того, чтобы в C получить количество символов в строке, можно воспользоваться функцией strlen. Эта функция доступна после подключения файла <string.h>. Прототип этой функции выглядит следующим образом:

size_t strlen ( const char * str );
  • Единственным аргументом эта функция принимает указатель на нуль-терминированную строку (массив символов, который заканчивается специальным символом '\0').
  • Функция возвращает количество символов в строке, не учитывая '\0'.

Давайте посмотрим на пример:

#include <stdio.h>
#include <string.h>

int main() {
  char str[64] = "strlen in C";

  int n = strlen(str);

  printf("n = %d", n);

  return 0;
}

Вывод:

n = 11

Как можете видеть, strlen вернула количество символов, которые хранятся в строке str.

Функция strlen никак не учитывает размер массива, в котором хранится строка. Она только учитывает количество байтов от начала строки до '\0'. Давайте посмотрим на еще один пример, в котором это наглядно видно:

#include <stdio.h>
#include <string.h>

int main() {
  char str[] = {'1', '2', '3', '\0', '4', '5'};

  int n = strlen(str);

  printf("n = %d", n);

  return 0;
}

Вывод:

n = 3

Здесь программа выводит 3, не учитывая символы '4' и '5', расположенные после '\0'.

Что будет выведено на экран?

#include <stdio.h>
#include <string.h>

int main() {
  char str1[] = {'H', 'e', 'l', 'l', 'o', '\0', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
  char str2[] = "Hello";
  int result = strlen(str1) + strlen(str2);

  printf("%d", result);

  return 0;
}
5
10
12
17

Как реализовать strlen самому

Теперь давайте попробуем реализовать эту функцию сами, чтобы лучше понять, как она работает. Для этого мы будем бежать по строке в цикле до тех пор, пока не встретим '\0':

#include <stdio.h>

int my_strlen(const char* s) {
  int result = 0;
  while (*s != '\0') {
    s++;
    result++;
  }

  return result;
}

int main() {
  char str[] = "string in C";

  int n = my_strlen(str);

  printf("n = %d", n);

  return 0;
}

Вывод программы:

n = 11

Программа выводит 11, что не удивительно. Наша версия функции strlen работает аналогично встроенной.

Упражнения

  1. Использование strlen:
    Напишите программу на C, которая запрашивает у пользователя строку и, используя функцию strlen, определяет и выводит длину этой строки. Программа также должна выводить введенную пользователем строку.

  2. Создание своей версии strlen:
    На основе представленного в статье примера создайте свою версию функции strlen и протестируйте её на разных строках. Сравните результаты работы вашей функции и стандартной функции strlen.

  3. Работа с множественными нуль-терминированными символами:
    Напишите программу, которая создает строку, содержащую несколько символов '\0' внутри, и демонстрирует различия (или их отсутствие) в подсчете символов между вашей версией strlen и стандартной функцией strlen.

Обсуждение