FreeBasic
Главная
Вход
Регистрация
Воскресенье, 22.12.2024, 08:58Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Можно ли как-то распознать тип указателя?
ShadExДата: Воскресенье, 23.09.2012, 21:56 | Сообщение # 1
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Например в File->Write_Data при попытке записать буффер с типом строки в файл, записывает совсем другой участок памяти - приходится постоянно помнить, что строку нужно записывать так:
Code
Write_Data(handle,Sadd(string),str_len)


Немного странно, потому что в Си байтовый массив - по сути и есть строка, а в FB эти типы разные...


Сообщение отредактировал ShadEx - Воскресенье, 23.09.2012, 22:20
 
haavДата: Понедельник, 24.09.2012, 06:57 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Quote (ShadEx)
Можно ли как-то распознать тип указателя?


Можно по той переменной , на которую он указывает. Мне ведом способ с помощью перегрузки функций, может есть и другие способы...

Однако перегружать Write_Data нет необходимости. В библиотеке для записи в файл строковых значений есть Write_String и Write_StringN. Или использовать строковой тип ZSTRING , он по сути байтовый массив.

Quote (ShadEx)
...записывает совсем другой участок памяти


Да это структура типа String.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ShadExДата: Вторник, 25.09.2012, 20:17 | Сообщение # 3
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Понятно, а не знаешь, как прочитать поля структуры String?
По приведенным по ссылке названиям полей ошибки -
Code

Dim as String sss = "123"
? "str_len=" & sss.len
? "str_size=" & sss.size


Сообщение отредактировал ShadEx - Вторник, 25.09.2012, 20:18
 
haavДата: Вторник, 25.09.2012, 21:58 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Quote (ShadEx)
Понятно, а не знаешь, как прочитать поля структуры String?


Code
Dim as String sss = "123"  
Dim As Integer Ptr pAddr = Cast(Integer Ptr,@sss)
? *(pAddr+1) 'длина строки
? *(pAddr+2) 'размер выделяемой памяти
Sleep


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
ShadExДата: Среда, 26.09.2012, 23:05 | Сообщение # 5
Лейтенант
Группа: Проверенные
Сообщений: 51
Репутация: 1
Статус: Offline
Ага, ну да, по смещениям, спасибо.
 
  • Страница 1 из 1
  • 1
Поиск: