Язык программирования Си (Ритчи, Керниган) - страница 36

>#define MAXLINE 1000

>char line[MAXLINE+1];

или в

>#define LEAP 1 /* in leap years - в високосные годы */

>int days[31+28+LEAP+31+30+31+30+31+31+30+31+30+31];

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

>"Я строковая константа"

или

>"" /* пустая строка */

Кавычки не входят в строку, а служат только ее ограничителями. Так же, как и в символьные константы, в строки можно включать эскейп-последовательности; \", например, представляет собой двойную кавычку. Строковые константы можно конкатенировать ("склеивать") во время компиляции; например, запись двух строк

>"Здравствуй," " мир!"

эквивалентна записи одной следующей строки:

>"Здравствуй, мир!"

Указанное свойство позволяет разбивать длинные строки на части и располагать эти части на отдельных строчках.

Фактически строковая константа - это массив символов. Во внутреннем представлении строки в конце обязательно присутствует нулевой символ '\0', поэтому памяти для строки требуется на один байт больше, чем число символов, расположенных между двойными кавычками. Это означает, что на длину задаваемой строки нет ограничения, но чтобы определить ее длину, требуется просмотреть всю строку. Функция strlen(s) вычисляет длину строки s без учета завершающего ее символа '\0'. Ниже приводится наша версия этой функции:

>/* strlen: возвращает длину строки s */

>int strlen(char s[])

>{

> int i;

> i = 0;

> while (s[i] != '\0')

>  ++i;

> return i;

>}

Функция strlen и некоторые другие, применяемые к строкам, описаны в стандартном заголовочном файле ‹string.h›.

Будьте внимательны и помните, что символьная константа и строка, содержащая один символ, не одно и то же: 'x' не то же самое, что "x". Запись 'x' обозначает целое значение, равное коду буквы x из стандартного символьного набора, а запись "x" - массив символов, который содержит один символ (букву x) и '\0'.

В Си имеется еще один вид константы - константа перечисления. Перечисление - это список целых констант, как, например, в

>enum boolean {NO, YES};

Первое имя в enum имеет значение 0, следующее - 1 и т.д. (если для значений констант не было явных спецификаций). Если не все значения специфицированы, то они продолжают прогрессию, начиная от последнего специфицированного значения, как в следующих двух примерах:

>enum escapes { BELL = '\a', BACKSPACE = '\b', TAB = '\t',

>                        NEWLINE = '\n', VTAB = '\v', RETURN = '\r' };

>enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,

>                        JUL, AUG, SEP, OCT, NOV, DEC };

>                        /* FEB есть 2, MAR есть 3 и т.д. */