有没有办法在Go中创建以null结尾的字符串
?
我当前尝试的是a:=“golang\0”
,但它显示了编译错误:
non-octal character in escape sequence: "
引号之间的文本构成了字面值的值,反斜杠转义被解释为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]
另一个选项是使用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"
}
s += string(rune(0))
例子:
s := "hello"
s += string(rune(0))
fmt.Printf("%q\n", s) // prints "hello\x00"
0
来完成你的工作。 - ameyCU\x00
的形式进行转义。另外,该编程语言不提供以 NUL 结尾的字符串,因此您必须修改每个字符串。 - toqueteos