如何在 Go 中创建以 null 结尾的字符串?

问题描述 投票:0回答:3

如何在 Go 中创建一个以 null 结尾的

string

我目前正在尝试的是

a:="golang\0"
,但它显示编译错误:

non-octal character in escape sequence: "
string go c-strings
3个回答
53
投票

规范:字符串文字:

引号之间的文本形成文字的值,反斜杠转义符解释为在 runeliters 中(除了

\'
是非法的,而
\"
是合法的),具有相同的限制。三位数八进制 (
\nnn
) 和两位十六进制 (
\xnn
) 转义符表示结果字符串的各个字节;所有其他转义符表示单个字符的(可能是多字节)UTF-8 编码。

所以

\0
是一个非法序列,你必须使用3个八进制数字:

s := "golang\000"

或使用十六进制代码(2 个十六进制数字):

s := "golang\x00"

或 unicode 序列(4 个十六进制数字):

s := "golang\u0000"

示例:

s := "golang\000"
fmt.Println([]byte(s))
s = "golang\x00"
fmt.Println([]byte(s))
s = "golang\u0000"
fmt.Println([]byte(s))

输出:全部以 0 代码字节结束(在 Go Playground 上尝试)。

[103 111 108 97 110 103 0]
[103 111 108 97 110 103 0]
[103 111 108 97 110 103 0]

1
投票

另一个选项是

ByteSliceFromString
功能:

package main

import (
   "fmt"
   "golang.org/x/sys/windows"
)

func main() {
   b, e := windows.ByteSliceFromString("golang")
   if e != nil {
      panic(e)
   }
   fmt.Printf("%q\n", string(b)) // "golang\x00"
}

1
投票

@icza 描述了如何编写带有空终止符的字符串文字。使用此代码将 null 添加到字符串变量的末尾:

 s += string(rune(0))

示例:

s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s)  // prints "hello\x00"
© www.soinside.com 2019 - 2024. All rights reserved.