如何用C编译字符串文字?根据我的理解,在test1中,字符串“hello”由编译器放入数据段,在第二行p中分配硬编码的虚拟地址。它是否正确?并且test1的工作原理和test2的工作原理之间没有基本的区别。
一些代码:
#include <stdio.h>
test1();
test2();
test3();
main()
{
test1();
test2();
//test3();
}
test1()
{
char *p;
p="hello";
}
test2()
{
char *p="hello";
}
test3()
{
char *p;
strcpy(p,"hello");
}
任何来自C标准的参考都将受到高度赞赏,因此我可以从编译器的角度深入理解这一点。
答案 0 :(得分:4)
从C标准的角度来看,没有特别要求文字字符串的放置位置。关于字符串文字存储的唯一要求是在C99 6.4.5 / 5“字符串文字”中:
"hello"
文字可能具有相同的地址,也可能不具有相同的地址。你不能指望任何一种行为。答案 1 :(得分:1)
您的理解是正确的,“Hello”的数据将被放入RO段,其相对虚拟地址将被分配给testX()函数中的指针。
但是,这些是特定于编译器的观点,C标准并不关心它们。
编辑:按照test3(),参见τεκ的评论。