Strings: char arrays and the null terminator · Строки: массивы char и нулевой терминатор
Text is an array of chars
- C has no separate string type. A string is just an array of
char. char word[] = "hi";actually stores'h','i', and a hidden'\0'at the end.- You can read one character at a time with an index, exactly like any array.
Текст — это массив символов
- В C нет отдельного типа строки. Строка — это просто массив
char. char word[] = "hi";на самом деле хранит'h','i'и скрытый'\0'в конце.- Вы можете читать один символ за раз с помощью индекса, точно так же, как любой массив.
The invisible terminator '\0'
- Every C string ends with a special null terminator, written
'\0'(a byte equal to0). - It marks where the text stops. The word
"hi"takes three bytes:'h','i','\0'. - Functions know a string has ended when they reach
'\0'— there is no stored length.
Невидимый терминатор '\0'
- Каждая строка в C заканчивается специальным нулевым терминатором, записываемым как
'\0'(байт, равный0). - Он обозначает, где текст заканчивается. Слово
"hi"занимает три байта:'h','i','\0'. - Функции понимают, что строка закончилась, когда достигают
'\0'— длина нигде не сохраняется.
Walking a string
- To visit each character, loop an index while
s[i] != '\0'. - When
s[i]becomes'\0', you have reached the end — stop. - This is how you count characters, search, or copy a string by hand.
Проход по строке
- Чтобы посетить каждый символ, используйте цикл с индексом, пока
s[i] != '\0'. - Когда
s[i]становится'\0', вы достигли конца — остановитесь. - Именно так подсчитывают символы, ищут или копируют строку вручную.
#include <stdio.h>
int main(void) {
char word[] = "hello";
int len = 0;
while (word[len] != '\0') { // stop at the terminator
len++;
}
printf("%d\n", len); // 5
return 0;
}
The <string.h> toolbox
<string.h>has ready-made helpers:strlen(s)(length),strcpy(dst, src)(copy),strcmp(a, b)(compare),strcat(dst, src)(join).strcmp(a, b)returns0when the two strings are equal — handy in tests.- These all rely on the
'\0'terminator to know where each string ends.
Инструментарий для <string.h>
<string.h>имеет готовые вспомогательные функции:strlen(s)(длина),strcpy(dst, src)(копирование),strcmp(a, b)(сравнение),strcat(dst, src)(объединение).strcmp(a, b)возвращает0, когда две строки равны — удобно при проверке.- Все они полагаются на терминатор
'\0', чтобы знать, где заканчивается каждая строка.
Common mistakes
- A string needs one extra byte for
\0: a 5-letter word needschar[6]. - Compare strings with
strcmp, not==.
Распространенные ошибки
- Строке нужен один дополнительный байт под
\0: слово из 5 букв требуетchar[6]. - Сравнивайте строки с помощью
strcmp, а не==.
Now you try
- To change a string in place, the caller must pass a writable
chararray, not a fixed text. - Stop your loops at
'\0'. Do not write amain— the checker provides one.
Теперь попробуйте сами
- Чтобы изменить строку на месте, вызывающий код должен передать изменяемый массив
char, а не константную строку. - Останавливайте свои циклы на
'\0'. Не пишитеmain— проверяющая система предоставит его.
Strings are arrays of characters · Строки — это массивы символов
Index each character from 0; the slice shows a range of chars. · Индекс каждого символа начинается с 0; срез показывает диапазон символов.
Complete int count_char(const char *s, char c) so it returns how many times c appears in the string s. Loop until you reach the end of the string. Do not write a main. · Завершите int count_char(const char *s, char c) так, чтобы она возвращала количество вхождений ⟨c⟩ в строку s. Цикл должен работать до конца строки. Не пишите main.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Complete int my_strlen(const char *s) so it returns the length of s without calling strlen. Walk the array until you reach the end. Do not write a main. · Завершите int my_strlen(const char *s) так, чтобы она возвращала длину ⟨s⟩ без вызова strlen. Пройдите по массиву до конца. Не пишите main.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Complete void reverse_str(char *s) so it reverses the characters of s in place. Find the length, then swap from both ends toward the middle. Do not write a main. · Завершите void reverse_str(char *s) так, чтобы она разворачивала символы ⟨s⟩ на месте. Найдите длину, затем меняйте местами символы с两端 к середине. Не пишите main.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.