【发布时间】:2012-06-19 02:29:38
【问题描述】:
我在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 data segment 通常是可读写的
标签: c string constants literals placement