Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在c中修改堆栈上的字符串_C_String_Stack - Fatal编程技术网

无法在c中修改堆栈上的字符串

无法在c中修改堆栈上的字符串,c,string,stack,C,String,Stack,可能重复: 下面的代码 int main() { char * st = "abc"; *st = 'z'; return 0; } 正在返回分段错误。如果堆栈上的字符串不可修改,为什么不在编译时给出错误?堆栈上的变量st是指针。分配给字符串常量的值为只读。char*str=修改此值很危险;不是和你得到的意义相同的字符串;它被称为字符串文字,修改它会根据标准产生未定义的行为。 如果您想要一个以后可以修改的字符串,请执行以下操作: 然后相应地修改它。字符串文字是只读的。改为声明一个

可能重复:

下面的代码

int main() {
  char * st = "abc";
  *st = 'z';
  return 0;
}

正在返回分段错误。如果堆栈上的字符串不可修改,为什么不在编译时给出错误?

堆栈上的变量st是指针。分配给字符串常量的值为只读。

char*str=修改此值很危险;不是和你得到的意义相同的字符串;它被称为字符串文字,修改它会根据标准产生未定义的行为。 如果您想要一个以后可以修改的字符串,请执行以下操作:


然后相应地修改它。

字符串文字是只读的。改为声明一个字符数组。顺便说一句,这是一个非常常见的问题。例如,请参阅。字符串不在堆栈上。它位于数据段中。指向字符串的指针位于堆栈上。出于兼容性原因,它不会给出编译时错误。ABC的类型实际上是chconst(4),它会给编译器带来错误。@ k-巴罗不在C中,abc是C++中的conchar(4),但是在C中它是char(4)。一个您不能尝试修改的类型,但类型没有告诉您这一点。
char str[] = "Some String";