ZSTRING
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgZstring
- 最后更新: 2021-04-28
标准数据类型:8 位字符字符串
语法
dim variable as Zstring * size
dim variable as Zstring ptr描述
Zstring 是 C 风格的固定大小字符数组。它没有描述符,因此将其作为参数传递给函数时长度计算更快。当变量具有固定的 size(数值常量或可以在编译时求值的表达式)时,FreeBASIC 通过将内容截断为长度 size - 1 来避免在赋值时可能发生的任何溢出。
Zstring ptr 可以指向标准的 Zstring,也可以用于实现"用户管理"的 Zstring,在这种情况下,必须使用 Allocate/Reallocate/Deallocate 来调整其大小/重新分配/释放,并由用户负责避免溢出。
字符串的末尾由空字符(ASCII 0)标记。这由 FreeBASIC 字符串处理函数自动添加。创建字符串时将追加空字符,长度通过扫描字符串中的第一个空字符来计算。空字符(例如 Chr(0))绝不能包含在 Zstring 的文本中,否则字符串的其余部分将被截断。
在 Zstring 中,Len 返回所包含字符串的大小,Sizeof 返回分配给 Zstring 的空间。Sizeof 仅在编译器知道大小时才起作用,即直接传递固定大小的 Zstring 变量,而不是作为解引用指针或 Byref 函数参数。
任何内置字符串函数(如 Left)也可以与 Zstring 一起使用,字符串运算符也同样适用。
此类型是为了方便与 C 库进行接口对接,以及替换无法通过指针管理的固定长度字符串而提供的。
任何字符串类型参数都可以直接传递给声明参数为 Zstring ptr 的过程。编译器会自动执行任何字符串类型参数与 Zstring ptr 类型参数之间的自动转换(无警告消息)。
为 Zstring 分配动态内存时,最安全的方法是使用 Callocate(或者最坏情况下,使用 Allocate 后立即赋值字符串数据,如第二个示例所示),以避免创建没有空字符的字符串数据(空字符是 Zstring 的终止字符)。
注意:当二元运算符(如赋值、等于、+、* 等)的任意操作数由解引用 'Zstring Ptr' 指针('pz')组成时,这可能给出 'Zstring' 字符串或 'Ubyte' 变量,取决于另一个操作数。如果另一个操作数是数值,则解引用的 'Zstring Ptr' 指针('*pz')将被视为对所指向的一个字符的 'Ubyte' 引用。如果使用 'Zstring' 指针索引 '[]' 运算符作为解引用语法('pz[n]'),它基本上是 'String' 索引 '[]' 运算符('(\*pz)[n]')的简写版本。
示例
start GeSHi
Dim As ZString * 13 str1 => "hello, world"
Print str1
Print Len(str1) '返回 12,即所包含字符串的大小
Print SizeOf(str1) '返回 13,即变量的大小end GeSHi
start GeSHi
Dim As ZString Ptr str2
str2 = Allocate( 13 )
*str2 = "hello, world"
Print *str2
Print Len(*str2) '返回 12,即所包含字符串的大小end GeSHi
方言差异
- 在 -lang qb 方言中不可用,除非使用别名
__Zstring引用。
与 QB 的区别
- FreeBASIC 新增
参见
StringWstringStandard Data Type LimitsExtends Zstring
返回 目录