Указатели и строки

Предыдущая тема Следующая тема Перейти вниз

Указатели и строки

Сообщение  justar в Пт Сен 05, 2008 5:13 pm

Код:
Dim s As String
Dim a As String * 1
Dim ps As String Ptr
Dim i As Integer
s = "Hello, World"
ps = @s
a = *(ps + i)
Print a
Sleep
не работает как предполагается.
При i = 0 выводится первый символ (как оно и должно быть). Но при i <> 0:
При нечётных значениях i видим пустое консольное окошко и нормальное завершение
При чётных значениях i GDB выдаёт ошибку:

Program reseived signal SIGSEGV. Segmentation fault.
0x00401ce2 in fb_hStrCopy@12 ()

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Указатели и строки

Сообщение  ShenZN в Пт Сен 05, 2008 8:00 pm

Правильным будет такой код:

Код:
Dim s As String
Dim a As String *1
Dim ps As zstring Ptr
Dim i As Integer
s = "Hello, World"
ps = strptr( s )
a = *(ps+i)
Print a
Sleep

Для получения указателя строки лучше использовать функцию StrPtr(), которая возвращает ZString Ptr
В случае использования @ или VarPtr будет возвращен адрес внутреннего дескриптора строки, как написано в документации по функции StrPtr(). Там же есть пару примеров.

Советую еще посмотреть тему http://freebasic.justforum.net/forum-f5/tema-t37.htm

ShenZN

Сообщения : 155
Дата регистрации : 2008-02-18
Откуда : Ukraine

Посмотреть профиль http://lodestar-game.narod.ru

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения