【发布时间】:2014-06-15 15:15:44
【问题描述】:
我一直在用 c 中的字符串做实验。 在这段代码中。
#include<stdio.h>
int main()
{
char *arr="output";
*arr='s';
printf("%s",arr);
return 0;
}
字符串“输出”是在内存中的什么位置创建的,并且我们有指针 arr(驻留在堆栈中)最初指向该字符串,为什么不能将其他字符分配给指针? 当我尝试运行这个程序时,我看到了运行时错误信号:11,这是分段错误。
我了解到,在 c++ 中,字符串“输出”是在只读内存中创建的,这会导致在编译过程中“不推荐使用从字符串常量到‘char*’的转换。c 中的行为是什么?
有人能解释一下为什么这会导致分段错误吗?这个字符串“输出”是在哪里创建的。
谢谢。
【问题讨论】:
-
它与@SteveCox 指出的部分中的代码一起保存。
-
字符串(有时还有其他)文字将被放置在程序文本部分(只读数据)中。
-
您可以为指针分配另一个字符串。但这不是你在这里所做的。
-
在 C99 中更改为
char *arr=(char []){"output"};。