C++字符串文字数据类型存储

sky*_*oor 21 c++ memory compiler-construction storage types

void f()
{
    char *c = "Hello World!"
}
Run Code Online (Sandbox Code Playgroud)

字符串存储在哪里?它的属性是什么?我只知道它是一个常数,还有什么?我可以从功能体内部返回吗?

Has*_*yed 22

它与你的二进制文件一起打包 - 打包我的意思是硬连线,所以是的,你可以将它返回并在其他地方使用它 - 你将无法改变它,我强烈建议你声明它:

const char * x = "hello world";
Run Code Online (Sandbox Code Playgroud)

  • @BillyONeal:确实如此. (8认同)

Dav*_*fer 8

该字符串存储在程序的数据区域中.这完全是编译器,可执行格式和平台相关的.例如,ELF二进制文件将其放在与Windows可执行文件不同的位置,如果您正在编译嵌入式平台,则此数据可能存储在ROM而不是RAM中.

以下是ELF格式布局的说明:

ELF布局

您的字符串数据很可能会在.data.text部分中找到,具体取决于编译器.

你当然可以从函数体内返回它.只需检查您的实现以验证它是随机访问,因为许多实现都不允许您覆盖它.


fre*_*low 6

§2.14.15字符串文字,第7节

窄字符串文字具有类型"n const char数组",其中n是下面定义的字符串的大小,并且具有静态存储持续时间.


Pra*_*rav 5

它通常存储在内存的只读部分中,并具有静态存储分配.

执行类似的操作会c[0] = 'k'调用未定义的行为.

我可以从功能体内部返回吗?

是!