cstring类型
cstring 类型意思是 compatible string “兼容字符串”,是编译后端字符串的原生表示。对于 C 后端, cstring 类型表示一个指向末尾为零的 char 数组的指针,该数组与 ANSI C 中的 char* 类型兼容。其主要目的是与 C 轻松互通。索引操作 s[i] 表示 s 的第 i 个 char ,但是不检查 cstring 的边界,因而索引操作并不安全。
为方便起见,Nim 中的 string 可以隐式转换为 cstring 。如果将 Nim 字符串传递给 C 风格的可变参数过程,也会隐式转换为 cstring :
proc printf(formatstr: cstring) {.importc: "printf", varargs,
header: "<stdio.h>".}
printf("这会%s工作", "像预期一样")
即使转换是隐式的,它也不是 安全的 : 垃圾收集器不认为 cstring 是根,并且可能收集底层内存。因此,隐式转换将在 Nim 编译器的未来版本中删除。 某些习语,例如将 const 字符串转换为 cstring 是安全的,并且仍将被允许。
为 cstring 定义的 $ 过程能够返回 string 。因此,从 cstring 获得 nim 的 string 可以这样:
var str: string = "Hello!"
var cstr: cstring = str
var newstr: string = $cstr
cstring 字面值不应被修改。
var x = cstring"literals"
x[1] = 'A' # 这是错的!!!
如果 cstring 来自常规内存(而不是只读内存),则可被修改:
var x = "123456"
var s: cstring = x
s[0] = 'u' # 这是可以的
cstring 值像字符串一样,也可用于 case 语句。
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .