Длина строки - функция strlen( )
Длина строки - функция strlen( )
В предыдущей главе мы практически без объяснений использовали операцию sizeof, которая дает нам размер объектов в байтах Функция strlen( ) позволяет определять длину строки числом символов. Поскольку для размещения одного символа в памяти отводится 1 байт, можно было бы предположить, что в результате применения любой из этих двух операций к одной строке будет получен одинаковый результат. Оказывается, это не так. Давайте немного изменим нашу предыдущую программу (добавим к ней несколько строк), и тогда мы поймем, в чем дело.
/*похвала 2*/
#define PRAISE " Вот это да, какое великолепное имя!"
main( )
{
char name [50];
printf(" Как вас зовут? ");
scanf(" %s", name);
printf(" Привет, %s. %s " , name, PRAISE);
printf(" Ваше имя состоит из %d букв и занимает %d ячеек памяти. ",
strlen (name), sizeof name);
printf(" Хвалебная фраза состоит из %d букв", strlen (PRAISE));
printf(" и занимает %d ячеек памяти. ", sizeof PRAISE);
}
Заметим, что случайно мы воспользовались двумя методами для обработки длинных операторов printf(). В первом случае мы, записав один оператор печати в двух строках программы. Мы сделали это, поскольку разрешается разбивать строку между аргументами, но не посередине строки. В другом случае использовались два оператора printf() для печати одной строки; мы указали символ "новая строка" ( ) только во втором из них. Представленный ниже результат работы данной программы поможет понять подобную ситуацию:
Как вас зовут ?
Перки
Привет, Перки. Вот это да, какое великолепное имя!
Ваше имя состоит из 5 букв и занимает 50 ячеек памяти.
Хвалебная фраза состоит из 35 букв и занимает 36 ячеек памяти.
Давайте посмотрим, в чем дело. Массив name занимает 50 ячеек памяти, и именно об этом сообщает операция sizeof. Но для хранения имени Перки требуются только первые пять ячеек, и как раз об этом нас информирует функция strlen( ). В шестой ячейке массива name содержится нуль-символ, и его появление служит сигналом для функции strlen( ) прекратить подсчет символов
РИС.4.4. Распознавание функцией strlen( ) конца строки
При переходе к обработке константы PRAISE обнаруживается, что функция strlen( ) опять дает нам точное число символов (включая пробелы и знаки пунктуации) в строке. Результат операции sizeof оказывается на единицу большим, поскольку при этом учитывается и "невидимый" нуль-символ, помещенный в конец строки. Мы не указываем компилятору, какой объем памяти он должен отвести для размещения всей фразы, он сам подсчитывает число символов между кавычками.
Еще одно замечание в предыдущей главе была использована операция sizeof со скобками, а в этой - без них. Решение, использовать ли скобки или нет, зависит от того, что вы хотите знать объем памяти, отводимый под элементы конкретного типа, или объем памяти, занимаемый определенным объектом В первом случае вы писали бы sizeof(char) или sizeof(float), а во втором - sizeof name или sizeof 6.28.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
6.13.3 Версия, длина заголовка и длина датаграммы
6.13.3 Версия, длина заголовка и длина датаграммы В настоящее время используется четвертая версия IP (версия "Следующее поколение" имеет номер 6).Длина заголовка измеряется в 32-разрядных словах. Если не нужны дополнительные варианты, можно ограничиться длиной заголовка в 5
Длина дуги
Длина дуги С помощью команды DIMARC создается размер длины дуги, указывающий расстояние вдоль дуги или дугового сегмента полилинии (рис. 11.14). Чтобы отличать эти размеры от линейных и угловых, для размеров длины дуги по умолчанию отображается символ дуги. Команда вызывается
Длина дуги
Длина дуги С помощью команды DIMARC создается размер длины дуги, указывающий расстояние вдоль дуги или дугового сегмента полилинии (рис. 11.14). Чтобы отличать эти размеры от линейных и угловых, для размеров длины дуги по умолчанию отображается символ дуги. Команда
Особенности кодирования литеральных символов и пар расстояние/длина
Особенности кодирования литеральных символов и пар расстояние/длина В предыдущих разделах ничего не было сказано о небольшом нюансе реализации алгоритма: как в процессе считывания сжатых данных отличить литеральный символ от кода расстояние/длина? В конце концов, не
Строки
Строки CharPrev Функция CharPrev возвращает указатель на предшествующий символ в строке. Функция заменяет функцию AnsiPrev . LPTSTR CharPrev ( LPCTSTR lpszStart , // указатель на первый символ LPCTSTR lpszCurrent // указатель на текущий символ ); Параметры lpszStart - указатель на начало строки. lpszCurrent - указатель
Длина дуги
Длина дуги С помощью команды DIMARC создается размер длины дуги , указывающий расстояние вдоль дуги или дугового сегмента полилинии (рис. 11.19). Чтобы отличать эти размеры от линейных и угловых, для размеров длины дуги по умолчанию отображается символ дуги. Команда
Пример 9-15. Длина переменной
Пример 9-15. Длина переменной #!/bin/bash# length.shE_NO_ARGS=65if [ $# -eq 0 ] # Для работы скрипта необходим хотя бы один входной параметр.then echo "Вызовите сценарий с одним или более параметром командной строки." exit $E_NO_ARGSfivar01=abcdEFGH28ijecho "var01 = ${var01}"echo "Length of var01 = ${#var01}"echo "Количество входных
Длина дуги
Длина дуги С помощью команды DIMARC создается размер длины дуги, указывающий расстояние вдоль дуги или дугового сегмента полилинии (рис. 10.10). Чтобы эти размеры отличались от линейных и угловых, для размеров длины дуги по умолчанию показан символ дуги. Команда вызывается из
2.5 Строки
2.5 Строки Строка есть последовательность символов, заключенная в двойные кавычки: «...». Строка имеет тип «массив символов» и класс памяти static (см. #4 ниже), она инициализируется зданными символами. Все строки, даже если они записаны одинково, различны. Компилятор
Какова длина второго имени?
Какова длина второго имени? Как бы стеки не заставили нас забыть, что кроме излюбленных специалистами по информатике примеров имеются структуры данных, тесно связанные с объектами реальной жизни. Вот забавный пример, взятый из почты форума Риски (Risks) (группа новостей Usenet
Строки
Строки Класс STRING описывает символьные строки. Он имеет специальный статус, поскольку нотация допускает манифестные строковые константы, обозначающие экземпляры STRING.Строковая константа записывается в двойных кавычках, например,"ABcd Ef ~*_ 01"Символ двойных кавычек должны