ZString
 
Стандартный тип данных: 8-битовая символьная строка

Синтаксис

Dim variable As ZString * size
Dim variable As ZString Ptr

Описание

ZString является массивом фиксированного размера символов С-стиля. Он не имеет дескриптор и его длина рассчитывается быстрее при передаче его в качестве аргумента функции. Когда переменная имеет фиксированный размер, FreeBASIC позволяет избежать переполнения, которое может возникнуть при присваивании, путем усечения длины size - 1.

ZString Ptr может указывать на стандартную ZString, также может быть использован для реализации "управляемого пользователем" ZString, в этом случае Allocate/Reallocate/Deallocate должны быть использованы для выделения памяти-перераспределения памяти-освобождения памяти пользователем, чтобы избежать переполнения .

Конец строки отмечен нулевым символом (0 ASCII). Он автоматически добавляется в FreeBASIC для функций работы со строками. Символ нуля будет добавлен, когда строка создается, а длина будет рассчитываться путем сканирования строки для первого нулевого символа. Нулевой символ (т.е., Chr(0)) не может содержаться в тексте ZString , в противном случае остальная часть строки будет усечена.

В ZString, Len возвращает размер содержащейся строки , а SizeOf возвращает пространство, выделенное для ZString. SizeOf работает, только если размер известен компилятору, т.е. фиксированного размера ZString переменная передается непосредственно, а не как разыменованный указатель или аргумент функции, переданный по ByRef.

Этот тип предназначен для простоты с интерфейсом C библиотек и также заменяет строки фиксированной длины, которые не могут управляться с помощью указателей. Любые внутренние строковые функции, такие как Left будут работать с ZString также как и любой строковой оператор.

Пример

Dim As ZString * 13 str1 => "hello, world"
Print str1
Print Len(str1)     'Возвращает 12, длина строки
Print SizeOf(str1)  'Возвращает 13, размер переменной


Dim As ZString Ptr str2
str2 = Allocate( 13 )
*str2 = "hello, world"
Print *str2
Print Len(*str2)     'Возвращает 12, длина строки 
Print SizeOf(*str2)  'возвращает 0, потому что разыменованный указатель передается, а не переменная


Различия диалектов

  • Нет в наличии в -lang qb диалекте, но есть псевдоним __Zstring.

Отличие от QB

  • Новое в FreeBASIC

См. также