Как правило, в процессе обработки строк в соответствующие функции передаются не сами строки, а их адреса, т. к. копирование одного адреса более эффективно, чем копирование всей строки.
Например, фрагмент программы
…
char *st = “Компьютер”,
*st1;
st1 = st;
puts( st1 );
…
показывает, как с использованием указателя st1, вывести исходную строку, на которую указывает st. При этом копируется не сама строка, а её адрес. Схема распределения оперативной памяти имеет вид
| &
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| К
| о
| м
| п
| ь
| ю
| т
| е
| р
| \0
|
|
Адрес строки (обозначенный на схеме как &) при инициализации строки записывается в ячейку указателя st. Оператор st1 = st; копирует значение этого адреса в ячейку указателя st1.
Однако, в случае, когда требуется сохранить копию строки и изменить оригинал, такой способ не подходит, т. к. указатели st и st1 указывают на одну и ту же строку.
Для создания копии строки необходимо использовать функцию strcpy( ).
Функция strcpy( ) копирует одну строку в другую. Прототип функциии имеет следующую структуру:
char *strcpy(char *s1, char *s2);
где в качестве двух аргументов используются указатели s1, s2 на символьные строки.
Строка, на которую указывает указатель s2 (второй аргумент), посимвольно копируется в символьный массив, на который указывает указатель s1 (первый аргумент). В качестве второго аргумента может использоваться указатель на копируемую строку (адрес символьного массива, содержащего строку) или строковая константа.
Функция возвращает указатель на скопированную строку.