Строковая константа (литерал) - последовательность символов (включая строковые и прописные буквы русского и латинского, а также цифры), заключенные в кавычки (“).
Например: “Школа N 35”, “город Тамбов”, “YZPT”.
Строковый литерал имеет тип char[]. Это означает, что строка рассматривается как массив символов. Отметим важную особенность, число элементов массива равно числу символов в строке плюс 1, так как нулевой символ (символ конца строки) также является элементом массива.
Символы строкового литерала сохраняются в области оперативной памяти. В конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый управляющей последовательностью \0.
Для сцепления строковых литералов можно использовать символ (или символы) пробела. Если в программе встречаются два или более строковых литерала, разделенные только пробелами, то они будут рассматриваться как одна символьная строка. Этот принцип можно использовать для формирования строковых литералов занимающих более одной строки.
|
|
Например:
#include <stdio.h>
main()
{ char *p;
p = “Это пример того, как Turbo C++ “
“автоматически\nвыполняет для вас конкатенацию “
“очень длинных строк,\nчто позволяет получить “
“более красивые программы“;
printf(“%s”,p); }
На выходе программы будет:
Это пример того, как Turbo C++ автоматически
выполняет для вас конкатенацию очень длинных строк,
что позволяет получить более красивые программы.
Для расширения строковой константы за границы строки в качестве символа продолжения можно использовать обратную наклонную черту (\):
printf(“В действительности \
это однострочная строка символов”);
Отметим, что все управляющие символы, кавычка (“), обратная дробная черта (\) и символ новой строки в строковом литерале и в символьной константе представляются соответствующими управляющими последовательностями. Каждая управляющая последовательность представляется как один символ. Например, при печати литерала “Школа \n N 35” его часть “Школа” будет напечатана на одной строке, а вторая часть “N 35” на следующей строке.
Следует отметить, что в строковых константах всегда обязательно задавать все три цифры в управляющей последовательности (см.#2.1). Например, отдельную управляющую последовательность \n (переход на новую строку) можно представить как \010 или \xA, но в строковых константах необходимо задавать все три цифры, в противном случае символ или символы следующие за управляющей последовательностью будут рассматриваться как ее недостающая часть.
Например:
“ABCDE\x009FGH” данная строковая команда будет напечатана с использованием определенных функций языка С++, как два слова ABCDE FGH, разделенные 8-ю пробелами, в этом случае если указать неполную управляющую строку”ABCDE\x09FGH”,то на печати появится ABCDE=|=GH, так как компилятор воспримет последовательность \x09F как символ”=+=”.
|
|
printf(«\x0072.1Простая операционная система»);
Предполагается, что эта строка будет интерпретирована как \x007 и «2.1Простая операционная система». Однако, Turbo C++ (и TurboC версии 2.0) компилируют ее как шестнадцатеричное число \x0072 и литеральную строку «.1Простая операционная система».
Чтобы избежать этих проблем, надо переписать ваш код следующим образом:
printf(«\x007» «2.1Простая операционная система»);
Неоднозначность может возникнуть также и в случае, когда за восьмеричной управляющей последовательностью следует невосьмеричная цифра. Например, поскольку 8 и 9не являются допустимыми восьмеричными цифрами, константа \258 будет интерпретирована как двухсимвольная константа, составленная из символов \25 и 8.