Длина строки - функция 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.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

2.5 Строки

Из книги AutoCAD 2009 для студента. Самоучитель автора Соколова Татьяна Юрьевна

2.5 Строки Строка есть последовательность символов, заключенная в двойные кавычки: «...». Строка имеет тип «массив символов» и класс памяти static (см. #4 ниже), она инициализируется зданными символами. Все строки, даже если они записаны одинково, различны. Компилятор


Длина дуги

Из книги AutoCAD 2009. Начали! автора Соколова Татьяна Юрьевна

Длина дуги С помощью команды DIMARC создается размер длины дуги, указывающий расстояние вдоль дуги или дугового сегмента полилинии (рис. 11.14). Чтобы отличать эти размеры от линейных и угловых, для размеров длины дуги по умолчанию отображается символ дуги. Команда вызывается


Длина дуги

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Длина дуги С помощью команды DIMARC создается размер длины дуги, указывающий расстояние вдоль дуги или дугового сегмента полилинии (рис. 10.10). Чтобы эти размеры отличались от линейных и угловых, для размеров длины дуги по умолчанию показан символ дуги. Команда вызывается из


Какова длина второго имени?

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Какова длина второго имени? Как бы стеки не заставили нас забыть, что кроме излюбленных специалистами по информатике примеров имеются структуры данных, тесно связанные с объектами реальной жизни. Вот забавный пример, взятый из почты форума Риски (Risks) (группа новостей Usenet


Строки

Из книги О чём не пишут в книгах по Delphi автора Григорьев А. Б.

Строки Класс STRING описывает символьные строки. Он имеет специальный статус, поскольку нотация допускает манифестные строковые константы, обозначающие экземпляры STRING.Строковая константа записывается в двойных кавычках, например,"ABcd Ef ~*_ 01"Символ двойных кавычек должны


6.13.3 Версия, длина заголовка и длина датаграммы

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

6.13.3 Версия, длина заголовка и длина датаграммы В настоящее время используется четвертая версия IP (версия "Следующее поколение" имеет номер 6).Длина заголовка измеряется в 32-разрядных словах. Если не нужны дополнительные варианты, можно ограничиться длиной заголовка в 5


3.3.8. Строки в записях

Из книги Фундаментальные алгоритмы и структуры данных в Delphi автора Бакнелл Джулиан М.


Особенности кодирования литеральных символов и пар расстояние/длина

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

Особенности кодирования литеральных символов и пар расстояние/длина В предыдущих разделах ничего не было сказано о небольшом нюансе реализации алгоритма: как в процессе считывания сжатых данных отличить литеральный символ от кода расстояние/длина? В конце концов, не


Длина дуги

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Длина дуги С помощью команды DIMARC создается размер длины дуги , указывающий расстояние вдоль дуги или дугового сегмента полилинии (рис. 11.19). Чтобы отличать эти размеры от линейных и угловых, для размеров длины дуги по умолчанию отображается символ дуги. Команда


Длина дуги

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Длина дуги С помощью команды DIMARC создается размер длины дуги, указывающий расстояние вдоль дуги или дугового сегмента полилинии (рис. 11.14). Чтобы отличать эти размеры от линейных и угловых, для размеров длины дуги по умолчанию отображается символ дуги. Команда


Пример 9-15. Длина переменной

Из книги Русский справочник по Win32 API автора Сорока Тарас

Пример 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 "Количество входных


Длина строки

Из книги C++ для начинающих автора Липпман Стенли

Длина строки


Строки

Из книги автора

Строки CharPrev Функция CharPrev возвращает указатель на предшествующий символ в строке. Функция заменяет функцию AnsiPrev . LPTSTR CharPrev ( LPCTSTR lpszStart , // указатель на первый символ LPCTSTR lpszCurrent // указатель на текущий символ ); Параметры lpszStart - указатель на начало строки. lpszCurrent - указатель