Язык С++ и программирование на нем. Рейзлин В.И. - 35 стр.

UptoLike

Составители: 

37
При инициализации создается строка buffer и в нее помещаются
символы (здесь 10 пробелов). Инициализация char *string=buffer уста-
навливает указатель string на начало этой строки.
Операция же присваивания в последней строке не копирует при-
веденную строку проба\nв массив buffer, а изменяет значение ука-
зателя string так, что он начинает указывать на строку “проба\n”:
buffer
\0
string
п р о б а \n \0
Чтобы скопировать строку проба\nв buffer, можно поступить
так:
char buffer[ ] = “ ”;
char p =“проба\n”;
int i =0;
while ( ( buffer[i] = p[i] ) != ’\0’ ) i++;
Или так:
char buffer[ ] = “
char p = проба\n”;
char buf = buffer;
while (buf ++ = p ++ );
Здесь сначала p копируется в buf, т.е. символ ‘п’ копируется
по адресу buf, который совпадает с адресом buffer, т.е. buffer[0] стано-
вится равен ‘п’. Затем происходит увеличение указателей p и buf, что
приводит к продвижению по строкам проба\nи buffer соответствен-
но. Последний скопированный символ будет \0’, его значение 0 и
оператор while прекратит цикл.
Еще проще воспользоваться библиотечной функцией, прототип
которой находится в файле string.h:
strcpy( buffer, “проба\n”);
При копировании необходимо обеспечить, чтобы размер памяти,
выделенной под buffer, был достаточен для хранения копируемой стро-
ки.