Бьерн Страуструп - Язык программирования С++. Главы 2-4 - Строки

ОГЛАВЛЕНИЕ


2.4.4  Строки

Строка - это последовательность символов, заключенная в двойные кавычки:

        "это строка"

Каждая строка содержит на один символ больше, чем явно задано: все строки оканчиваются нулевым символом ('\0'), имеющим значение 0. Поэтому
       sizeof("asdf")==5;

Типом строки считается "массив из соответствующего числа символов", поэтому тип "asdf" есть char[5]. Пустая строка записывается как "" и имеет тип char[1]. Отметим, что для любой строки s выполняется strlen(s)==sizeof(s)-1, поскольку функция strlen() не учитывает завершающий символ '\0'.

Внутри строки можно использовать для представления невидимых символов специальные комбинации с \. В частности, в строке можно задать сам символ двойной кавычки " или символ \. Чаще всего из таких символов оказывается нужным символ конца строки '\n', например:

       cout << "звуковой сигнал в конце сообщения\007\n"
Здесь  7 - это значение в ASCII символа BEL (сигнал), который в переносимом виде обозначается как \a. Нет возможности задать в строке "настоящий" символ конца строки:

      "это не строка,
       а синтаксическая ошибка"

Для большей наглядности программы длинные строки можно разбивать пробелами, например:
       char alpha[] = "abcdefghijklmnopqrstuvwxyz"
                      "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Подобные, подряд идущие, строки будут объединяться в одну, поэтому массив alpha можно эквивалентным образом инициализировать с помощью одной строки:
        "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

В строке можно задавать символ '\0', но большинство программ не ожидает после него встречи с какими-либо еще символами. Например, строку "asdf\000hjkl"  стандартные функции strcpy() и strlen()
будут рассматривать как строку "asdf".

Если вы задаете в строке последовательностью восьмеричных цифр числовую константу, то разумно указать все три цифры. Запись этой строки и так не слишком проста, чтобы еще и раздумывать, относится ли цифра к числу или является отдельным символом. Для шестнадцатеричных констант используйте два разряда. Рассмотрим следующие примеры:

       char v1[] = "a\x0fah\0129";    // 'a' '\xfa' 'h' '\12' '9'
       char v2[] = "a\xfah\129";      // 'a' '\xfa' 'h' '\12' '9'
       char v3[] = "a\xfad\127";      // 'a' '\xfad' '\127'