Функция strcpy( )

Функция strcpy( )

     Мы уже говорили, что если pts1 и pts2 являются указателями строк, то выражение

pts2 = ptsl;

копирует только адрес строки, а не саму строку. Предположим, что вы все же хотите скопировать строку. В этом случае можно использовать функцию strcpy( ). Она работает примерно так:

/* демонстрация strcpy( ) */

#include <stdio.h>

#define WORDS  "Проверьте, пожалуйста, вашу последнюю чапись."

main( ) {

static char *orig = WORDS;

static char copy [40];

puts(orig);

puts(copy);

strcpy(copy, orig);

puts(orig);

puts(copy);

}

Вот результат:

Проверьте, пожалуйста, вашу последнюю запись.

Проперьтe, пожалуйста, пашу последнюю запись.

Проверьте. пожалуйста, пашу последнюю запись.

     Очевидно, что строка, на которую указывает второй аргумент (orig) функции strcpy( ), скопирована в массив, на который указывает первый аргумент (copy). Порядок аргументов функции такой же, как в операторе присваивания: строка, получающая значение, стоит слева. (Пустая строка является результатом печати массива copy до копирования, и она говорит о том, что статические массивы .инициализируются нулями, т. е. нуль-символами в символьном виде.)

     Нужно обеспечить, чтобы размер массива, принимающего строку, был достаточен для ее размещения. Поэтому мы используем описание

static char copy [40];

а не

static char *copy; /* не выделяет память для строки */

Короче говоря, strcpy() требует два указателя строк в качестве аргументов. Второй указатель, ссылающийся на исходную строку, может быть объявленным указателем, именем массива или строковой константой. А первый указатель, ссылающийся на копию, должен ссылаться на массив или часть массива, имеющего размер, достаточный для размещения строки.

     Теперь, когда мы описали несколько функций, работающих со строками, рассмотрим целую программу, работающую со строками.