我偶然发现了这个功能的answer到this question:字符串放置在哪里,为什么我可以返回指向它们的指针?
/* Note: I've formatted the code for readability. */
const char * getString() {
const char *x = "abcstring";
return x;
}
我很惊讶地发现,一个指针返回文本字符串的工作,并没有像段错误我想的那样。我总是认为文字被推入堆栈或放入其他一些临时存储器中,但只限于函数的作用域。但在这里,它似乎比我想象的更加静态。然后他们被放入某种类型的字符串池,这对整个可执行文件是全局的吗?
此外,如果我将字符串文字作为参数传递给函数,它是一样的吗?例如:
/* Where is the string literal in this example being placed? */
myfunc(value1, value2, "rainbowdash");
我希望有人能够启发我。提前致谢! :)
我相信他们存储在二进制文件的'.data'部分。改变你的代码是一个数组:'const char x [] =“abcstring”;'会导致字符串被存储在堆栈中。 – Pubby
相关:http://stackoverflow.com/q/3570687/20862 –
可能的诱惑:http://stackoverflow.com/questions/2589949/ – ellotheth