Краткие итоги
- Для представления текстовой информации в С используются символьные данные и строки.
- В С не определен строковый тип данных, и строка представляется как массив символов.
- Инициализировать строку можно как массив символов.
- Признаком конца строки является нулевой символ.
- Обратиться к элементу строки можно по индексу, который соответствует порядковому номеру элемента.
- Нумерация элементов строки начинается с нуля. Размер строки определяется количеством входящих в нее символов.
- В С предусмотрены различные способы ввода и вывода одиночных символов и строк: с помощью стандартных функций, с помощью потокового или форматированного ввода/вывода. При считывании строки с клавиатуры признак конца строки добавляется автоматически.
- Каждому символу однозначно соответствует его внутренний код.
- Для работы со строками в языке С предусмотрены стандартные функции, прототипы которых включены в стандартные библиотеки stdlib.h и string.h.
- При обращении к функциям для работы со строками следует учитывать, что изменение значений элементов строк сохраняются после завершения работы функции.
- Перед использованием строки в программном коде ее необходимо проинициализировать. Неинициализированные строки могут привести к некорректной работе программы.
- В некоторых стандартных функциях по работе со строками следует проводить контроль длин параметров.
- Результат работы некоторых функций требует принудительного добавления к строке символа конца строки.
- Значения элементов строк зависят от регистра.
- Изменение регистра символов кириллицы в программе может выполняться некорректно.
- В силу специфики представления строк в виде символьного массива сами строки, строковые константы, заключенные в кавычки, и указатели на строки обрабатываются эквивалентно.
- Строки передаются в функции в качестве параметров как массивы символов или как указатели типа char.
- Обращение к конкретному элементу строки можно осуществить посредством адресации индексированного имени строки.
- При формировании строки без использования стандартных функций требуется дописывать символ конца строки.
- С помощью указателей на константы можно защитить строку от изменений.
- Копирование строк с помощью указателей осуществляется через объявление нового указателя, адресующего область памяти, занимаемую строкой или подстрокой.
Контрольные вопросы
- Почему в С не выполняется операция прямого присваивания значения строке?
- Почему символ и строка, состоящая из одного символа, занимают разный объем памяти?
- Почему в функции scanf("%s", string); не указывается обращение к переменной по адресу?
- Допустима ли операция сравнения над символами? Если да, то каким образом определены отношения "больше" и "меньше"?
- Какая из функций, gets или puts, заносит в поток управляющий символ '\n' и с какой целью?
- Можно ли выполнить присваивание символьной переменной числового значения? Почему?
- В чем различия результатов вывода символьной переменной со спецификаторами %d и %c?
- Что будет являться результатом работы функции побайтового копирования строк, если длина строки-источника превосходит допустимый размер строки-приемника?
- Что будет являться результатом работы функции побайтового копирования строк, если длина строки-источника меньше размера строки-приемника?
- Почему при сравнении строк важен регистр символов?
- Как сравниваются строки разной длины?
- Какие возможны последствия при обращении к неинициализированной строке?
- Почему функция изменения регистра символов строки может некорректно работать с кириллицей?
- Что будет являться результатом работы функции побайтового копирования строк, если длина строки-источника превосходит допустимый размер строки-приемника?
- Что будет являться результатом работы функции побайтового копирования строк, если длина строки-источника меньше размера строки-приемника?
- Почему при сравнении строк важен регистр символов?
- Как сравниваются строки разной длины?
- Какие возможны последствия при обращении к неинициализированной строке?
- Почему функция изменения регистра символов строки может некорректно работать с кириллицей?
- Почему обращения к строке через ее имя и через указатель эквивалентны?
- Почему в качестве параметра функции передается адрес строки, а не сама строка символов?
- Возможно ли применение операций инкремента и декремента к указателю на строку? Если да, то что будет адресовать полученный указатель?
- Почему при формировании строки без использования стандартных функций необходимо дописывать символ конца строки? Почему этого не требуется при считывании строк с клавиатуры?
- Какие возможны ошибки в программе при некорректной работе со строками?
- Для защиты строки от изменения объявляется указатель на константу или указатель-константа? Почему?