FreeBasic
Главная
Вход
Регистрация
Среда, 09.10.2024, 10:44Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Черная магия при работе со строками
haavДата: Вторник, 13.11.2012, 17:49 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Репутация: 49
Статус: Offline
Черная магия при работе со строками


Если вам дороги нервы:

Никогда не используйте в классах тип String неопределенной длины (как в примере ниже). Рано или поздно программа начнет шутить над вами. Я в этом успел убедиться. Лучшим вариантом, верным на мой взгляд для использования строковых данных в классах (равно как и в структурах), являются:

1) Zstring , Wstring с определенной длиной
2) А так же указатели на типы String, Zstring , Wstring

Не зря же в любой структуре WinAPI используется тип LPSTR или LPWSTR!

У меня было что-то типа такого:

Code
Type Mytype
  one as String*1
  two as string
  three as string
End Type

Type MyCLASS
  as Mytype Array(200)
  ...
  ...
  ...
End Type


В один прекрасный момент, (когда добавил новый модуль) программа, собранная на компиляторе 0.24, стала вылетать при работе, сообщая об ошибке доступа к памяти. При том вылет был на таком месте, где сделано кажется все безупречно. Более того, программа собранная на компиляторе 0.23 , работала без проблем. Я начал искать ошибку, естественно держа в голове то, что это могла быть ошибка самого компилятора. В таком положении уже не знаешь что думать. Скажу честно потратил времени не мало, при том что использовал отладчик. Только потом осенила догадка по поводу STRING. Ошибка исчезала в двух случаях:

1) Все три поля структуры с типом String я поставил определенной длины (для моего кода было неудобно, поскольку нужно было вручную приписывать ноль).
2) Заменил тип String на Zstring определенной длины (этот вариант я предпочел)

Пишу и надеюсь, что те кто прочитает не наступит на те же грабли. wink


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Четверг, 30.05.2013, 08:50 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1363
Репутация: 49
Статус: Offline
Сообщения не относящиеся к данной теме перемещены сюда

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
  • Страница 1 из 1
  • 1
Поиск: