Лекция: Копирование строк

Оператор присваивания для строк не определен. Если с1 и с2 — символьные массивы, вы не сможете ско­пировать один в другой следующим образом:

с1 = с2; /* ??? */

Этот оператор не компилируется. Но если с1 и с2 объявить как указатели типа char *, компилятор согла­сится с этим оператором, но вряд ли вы получите ожидаемый результат. Вместо копирования символов из од­ной строки в другую оператор с1 = с2 скопирует указатель с2 в указатель с1, перезаписав, таким образом, адрес в с1, потенциально потеряв информацию, адресуемую указателем.

Чтобы скопировать одну строку в другую, вместо использования оператора присваивания вызовите функ­цию копирования строк strcpy(). Для двух указателей с1 и с2 типа char * оператор

strcpy(c1, с2);

копирует символы, адресуемые указателем с2, в память, адресуемую указателем с1, включая завершающие ну­ли. И только на вас лежит ответственность за то, что принимающая строка будет иметь достаточно места для хранения копии.

Аналогичная функция strncpy() ограничивает количество копируемых символов. Если источник (source) и приемник (destination) являются указателями типа char • или символьными массивами, то оператор

strncpy(destination, source, 10);

скопирует до 10 символов из строки, адресуемой указателем source, в область памяти, адресуемую указателем destination. Если строка source имеет больше 10 символов, то результат усекается. Если же меньше — неис­пользуемые байты результата устанавливаются равными нулю.

еще рефераты
Еще работы по информатике