如何在 Go 中创建一个以 null 结尾的
string
?
我目前正在尝试的是
a:="golang\0"
,但它显示编译错误:
non-octal character in escape sequence: "
引号之间的文本形成文字的值,反斜杠转义符解释为在 runeliters 中(除了
是非法的,而\'
是合法的),具有相同的限制。三位数八进制 (\"
) 和两位十六进制 (\nnn
) 转义符表示结果字符串的各个字节;所有其他转义符表示单个字符的(可能是多字节)UTF-8 编码。\xnn
所以
\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]
另一个选项是
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"
}
@icza 描述了如何编写带有空终止符的字符串文字。使用此代码将 null 添加到字符串变量的末尾:
s += string(rune(0))
示例:
s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s) // prints "hello\x00"