llvm 字符串中的 \0A\00 到底是什么

use*_*544 5 llvm

我只是 llvm 汇编的初学者,我喜欢问我不确定的所有问题。

我只是在看 hello world 程序和 @str = 内部常量 [13 x i8] c"hello world\0A\00"

我不明白后缀是什么意思 \0A\00 我尝试读取它,但最终输出没有换行符,但是如果我只有 \0A 换行符就会回来......我觉得 \00 是没用……是真的吗?

Oak*_*Oak 6

在 LLVM IR 语法中,反斜杠后跟两个十六进制字符表示该字符的ASCII 值与这两个字符定义的值相同。

在本例中,字符是索引 10 (0xA) 处的字符(换行符)和索引 0 处的字符(称为“null”),用于在许多不同系统中终止字符串。在 C 语言中,这些将被写为\nand \0 (或只是 0),并\0隐式添加到 C 中文字字符串的末尾(但在 LLVM IR 中则不然)。

换句话说,你看到的字符串相当于"hello world\n"C中的字符串。

注意:虽然可以使用非空终止字符串,但这是非常不健康的,并且许多内置字符串操作会对这些字符串产生未定义的行为。不要省略空终止符。