2013-02-05 87 views
1

我只是一个关于llvm程序集的初学者,我喜欢问关于 关于我不确定的所有问题。在llvm字符串中, 0A 00究竟是什么

我只是在看Hello World程序 和@str =内部常数13×6-18] C “世界你好\ 0A \ 00”

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

+0

如果你不介意在你的世界部分之后在你的字符串中包含所有剩余的计算机内存,那就没用了。 NULL是字符串终止符。 – geoffspear

回答

2

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

在这种情况下,字符是索引10(0xA) - 这是一个换行符 - 和索引0,它被称为“null”,用于在许多不同的系统中终止字符串。在C语言中,这些将被写为\n\0(或只是0),而\0被隐式地添加到C中的文字字符串的末尾(但不在LLVM IR中)。

换句话说,你看到的字符串等同于"hello world\n"在C.

注:虽然可能与非空终止字符串的工作,这是非常不健康的,很多内置的在字符串操作上会有这些undefined behavior。不要忽略空终止。