有没有办法在Go中创建以null结尾的字符串?

27

有没有办法在Go中创建以null结尾的字符串

我当前尝试的是a:=“golang\0”,但它显示了编译错误:

non-octal character in escape sequence: "

如果需要的话,使用 0 来完成你的工作。 - ameyCU
请参阅:https://golang.org/ref/spec#String_literals。 - Volker
2
在字符串中,NUL 以 \x00 的形式进行转义。另外,该编程语言不提供以 NUL 结尾的字符串,因此您必须修改每个字符串。 - toqueteos
3个回答

53

规范:字符串字面值:

引号之间的文本构成了字面值的值,反斜杠转义被解释为rune字面值中所述的方式(除了\'是不合法的,而\"是合法的),并且有相同的限制。三位八进制(\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

1
@icza描述了如何使用空终止符编写字符串字面量。使用以下代码将null添加到字符串变量的末尾:
 s += string(rune(0))

例子:

s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s)  // prints "hello\x00"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接