FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

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

Участников: 2

Перейти вниз

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

Сообщение  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
Возраст : 49
Откуда : Кишинёв, Республика Молдоа

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

Указатели и строки Empty 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(). Там же есть пару примеров.

Советую еще посмотреть тему https://freebasic.forum2x2.ru/forum-f5/tema-t37.htm

ShenZN

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

http://lodestar-game.narod.ru

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

Вернуться к началу

- Похожие темы

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