/* инициализация массива строк */
printf("Привет! Я Клайд, компьютер.
У меня много талантов.\n");
printf("%s \n", "Позвольте рассказать о некоторых из них.");
puts(" Каковы они? Ах да, вот их неполный перечень.");
for(i = 0; i
puts(mytal[i]); /* печатает перечень талантов компьютера */
puts(m3);
gets(name);
printf(" Хорошо, %s, %s\n" , name, MSG);
printf(" %s\n %s\n", m1, m2);
gets(talents);
puts(" Давайте, посмотрим, получил ли я этот перечень:");
puts(talents);
printf(" Спасибо за информацию, %s \n" , name);
}
PИC. 13.1. Программа, использующая строки.
Чтобы помочь вам разобраться в том, что делает эта программа, мы приводим результат ее работы:
Привет, я Клайд, компьютер. У меня много талантов.
Позвольте рассказать о некоторых из них.
Каковы они? Ах да, вот их неполный перечень.
Быстро складываю числа.
Точно умножаю.
Записываю данные.
Правильно выполняю команды команды.
Понимаю язык Си.
Достаточно обо мне - Как вас зовут? Найджел Барнтвит
Хорошо, Найджел Барнтвит, у вас, наверное, много талантов.
Расскажите о некоторых.
Только ограничтесь одной строкой.
Если вы не можете вспомнить что-нибудь, придумайте.
Фехтование, пение тирольских песен, симуляция, дегустация сыра.
Давайте посмотрим, получил ли я этот перечень.
Фехтование, пение тирольских песен, симуляция, дегустация сыра.
Спасибо за информацию, Найджел Барнтвит.
Тщательно исследуем программу. Но вместо того чтобы просматривать строку за строкой, применим более общий подход. Сначала рассмотрим способы определения строк в программе. Затем выясним, что нужно для чтения строки в программе. И наконец, изучим способы вывода строки.
ОПРЕДЕЛЕНИЕ СТРОК В ПРОГРАММЕ
Всякий раз, когда компилятор встречается с чем-то, заключенным в двойные кавычки, он определяет это как строковую константу. Символы, заключенные в кавычки, плюс завершающий символ '\0', записываются в последовательные ячейки памяти. Компилятор подсчитывает количество символов, поскольку ему нужно знать размер памяти, необходимой для запоминания строки. Наша программа использует несколько таких строковых констант, чаще всего в качестве аргументов функций printf( )и puts( ). Заметим также, что мы можем определять строковые константы при помощи директивы #define.
Если вы хотите включить в строку символ двойной кавычки, ему должен предшествовать символ обратной дробной черты:
рrintf("\"Беги, Спот, беги!\" - сказал Дик.\n");
В результате работы этого оператора будет напечатана строка:
"Беги, Cпот, беги! - "сказал Дик.
Cтроковые константы размещаются в статической памяти . Вся фраза в кавычках является указателем на место в памяти, где записана строка. Это аналогично использованию имени массива, служащего указателем на расположение массива. Если это действительно так, то как выглядит оператор, который выводит строку?
/* строки в качестве указателей */
main( )
{
printf("%s, %u, %c \n", "We", "love", *"figs");
Итак, формат %sвыводит строку We. Формат %uвыводит целое без знака. Если слово "love"является указателем, то выдается его значение, являющееся адресом первого символа строки. Наконец, *"figs"должно выдать значение, на которое ссылается адрес, т. е. первый символ строки "figs". Произойдет ли это на самом деле? Да, мы получим следующий текст:
We, 34, f
Ну, вот! Давайте теперь вернемся к строкам, находящимся в символьных массивах .
Массивы символьных строк и их инициализация
При определении массива символьных строк необходимо сообщить компилятору требуемый размер памяти. Один из способов сделать это - инициализировать массив при помощи строковой константы. Так как автоматические массивы нельзя инициализировать, необходимо для этого использовать статические или внешние массивы . Например, оператор
char m1[ ] = "Только ограничьтесь одной строкой.";
инициализировал внешний (по умолчанию) массив m1для указанной строки. Этот вид инициализации является краткой формой стандартной инициализации массива
char m1[ ] = {'Т', 'о', 'л', 'ь', 'к', 'о', ' ',
'о', 'г', 'р', 'а', 'н', 'и', 'ч',
'ь', 'т', 'e', 'с', 'ь', ' ', 'о',
'д', 'н', 'о', 'й', ' ', 'с', 'т',
Читать дальше