string.erase()
От: ikamyn  
Дата: 24.10.03 14:16
Оценка:
Как обойти баг

string str;
str = "0123456789012345678";
str.erase(0, 5);

когда размер строки изменяется с > 16 на < 16, т.е. переходит через 16 портится вся строка
STLPort не помогает. Компилятор VisualStudio 2003, NET не использую.

Заранее благодарен.
Re: string.erase()
От: nap2k Верблюд есть
Дата: 24.10.03 14:43
Оценка:
Здравствуйте, ikamyn, Вы писали:

I>Как обойти баг


I>string str;

I>str = "0123456789012345678";
I>str.erase(0, 5);

I>когда размер строки изменяется с > 16 на < 16, т.е. переходит через 16 портится вся строка

I>STLPort не помогает. Компилятор VisualStudio 2003, NET не использую.

I>Заранее благодарен.


Это дебаггер бычится, на самом деле все работает.
Re[2]: string.erase()
От: ikamyn  
Дата: 24.10.03 14:59
Оценка:
Здравствуйте, nap2k, Вы писали:

N>Здравствуйте, ikamyn, Вы писали:


I>>Как обойти баг


I>>string str;

I>>str = "0123456789012345678";
I>>str.erase(0, 5);

I>>когда размер строки изменяется с > 16 на < 16, т.е. переходит через 16 портится вся строка

I>>STLPort не помогает. Компилятор VisualStudio 2003, NET не использую.

I>>Заранее благодарен.


N>Это дебаггер бычится, на самом деле все работает.


Спасибо, дейсвительно так.
Re: string.erase()
От: Samson_nick Россия  
Дата: 24.10.03 15:13
Оценка:
Здравствуйте, ikamyn, Вы писали:

I>Как обойти баг


I>string str;

I>str = "0123456789012345678";
I>str.erase(0, 5);

I>когда размер строки изменяется с > 16 на < 16, т.е. переходит через 16 портится вся строка

I>STLPort не помогает. Компилятор VisualStudio 2003, NET не использую.

I>Заранее благодарен.

Вообще говоря, работая со строками приходится пользоваться иной раз переводом в char буфер,
обработкой в нём и обратноё преобразование.
Конечно это не самое изящное решение, но я бы реализовал ф-цию erase сам, по крайней мере попробовал бы
То что строка портиться при переходе через 16 может быть зависит от упаковки компилятором структур в памяти.
В VS++, как я понял структуры по умолчанию пакуются со смещением 8 байт, а мне однажды понадобилось создать структуру
размером 100 байт. Так вот пока я не указал компилятору смещение в 4 байта, моя структура имела размер кратный 8.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.