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

Функция puts( )

Функция puts( )

     Это очень простая функция; у нее есть только один аргумент, являющийся указателем строки. Нижеследующий пример иллюстрирует некоторые из многих способов ее применения.

/* простые выдачи */

#include <stdio.h>

#define DEF  "Я строка #define."

main( )

{

static char str1[ ] = "Массив инициализирован мной.";

static char *str2 = "Указатель инициализирован мной.";

puts(" Я аргумент функции puts( )." );

puts(DEF);

puts(str1);

puts(str2);

puts(&str1[4]);

puts(str2 + 4);

}

В результате работы программы получаем

Я аргумент функции puts( ).

Я строка #define.

Массив инициализирован мной.

Указатель инициализирован мной.

ив инициализирован мной.

атель инициализирован мной.

Этот пример напоминает нам, что фразы в кавычках и имена строк символьных массивов являются указателями. Обратите внимание на два последних оператора. Указатель &strl[4] ссылается на пятый элемент массива str1. Этот элемент содержит символ 'и', и функция puts( ) использует его в качестве начальной точки. Аналогично str2 + 4 ссылается на ячейку памяти, содержащую 'а' в "указателе", и с нее начинается вывод строки.

Как puts( ) узнает, когда остановиться? Она прекращает работу, если встречает нуль-символ, поэтому лучше, чтобы он был. Не пытайтесь делать так!

/* нет строки! */

main( )

{

static char dont[ ] = (' H', ' Г , ' ! ', ' ! ');

puts(dont);  /* dont не является строкой */

}

     Поскольку в dont отсутствует завершающий нуль-символ, она не является строкой. Так как нуль-символ отсутствует, puts( ) не знает, когда ей останавливаться. Она будет просто перебирать ячейки памяти, следующие за dont до тех пор, пока не найдет где-нибудь нуль-символ. Если повезет, она, может быть, найдет его в ближайшей ячейке, но может и нe повезти.

     Обратите внимание, что любая строка, вводимая функцией puts( ), начинается с новой строки. Если puts( ) в конце концов находит завершающий нуль-символ, она заменяет его символом "новой строки" и затем выводит строку.

Оглавление книги

Оглавление статьи/книги

Генерация: 0.152. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз