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

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

Модер


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

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


Цитата:
Из всего вышесказанного становится непонятно почему не работает код, ставшей причиной этого топика
Потому что это лажа.

Пример 1.
Цитата:
char *pch ="test"; *pch='x';
"test" не может быть константой.
В C/C++ константность - свойство не данных, а переменных. Две переменные, одна константная, другая нет, могут ссылаться на одно и то же "test", это никак взаимно не ограничивает операции с ними. Потому речь о константности "test" вести абсолютно бессмысленно.

Пример 2.
Цитата:
const char g_pch[]="test";
Секция .rdata - часть EXE файла, именно сюда компоновщик поместит переменную g_pch
Опаньки!
Код: Выделить весь код
void x(void)
{
  const xx[]="test";
}
Про то, что xx[] на стеке будет, можно даже не говорить. Если нет - стековый параметр суется в секцию данных - это просто ужас, такие компиляторы если и есть в природе, они абсолютно не жизнеспособны.

А вот "test" может быть как в стеке (прямо здесь же, зачем ее иметь в других местах?), а может быть и в секции данных (если "test" много и компилятор решил заняться оптимизацией).

Crew
Попробуй сделать так

void addx(идентификация листа, напр., указатель на него)
{
 char x[8] = "йцукен";
 x[0]='q'; //чтоб не оптимизировалось
 твой Add(x)
}
[/code]

если вылетит - придется либо глобальные строчки использовать, либо руками память выделять/освобождать (освобождать можно при наступлении события удаления элемента, вроде там такое есть, по крайней мере винда такое сообщение шлет).

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


Отправлено: 09:02, 10-04-2003 | #20

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