Имя пользователя:
Пароль:
 

Название темы: Строки в С\С++
Показать сообщение отдельно

Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


shurikan
Ты не совсем прав, что это не имеет отношения к выделению памяти.

char* pch = "Some_string"

В этом случае в стеке создается pch, в сегменте данных - КОНСТАНТА "Some_string", и pch инициализируется адресом константы. Менять значение указателя можно без проблем, а вот в "Some_string" писать нельзя именно из-за того, что под нее так выделена память.

char pch[] = "Some_string"

На стеке создается массив pch[] и его элементы инициализируются значениями из строковой константы (в принципе, компилятор мог бы, как и в прошлый раз, выделить место с сегменте данных, а после создания pch[] написать какой-нибудь memcpy, если эта константа много где встречается и так будет компактнее). То есть, "Some_string" как таковой может и вовсе не существовать. Естественно, в pch[] можно писать.


Цитата:
Указателю нельзя присваивать неадресные значения.
pchar x = "x1";
x = "x2";
x = "x3";
и т.д.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 08:23, 07-04-2003 | #8

Название темы: Строки в С\С++