0

这是我的程序,当我尝试执行 s[0] = s[1] 时出现段错误。我不明白为什么这不起作用,因为我所做的只是在 s[1] 中取值并将其放入 s[0] 中。

#include<stdio.h>

void main() {
  char x;
  char *s="stackoverflow";

  s[0] = s[1];  // it is segfaulting here 
  x = s[0];  //this works though 
  printf("this is: %s\n",s);
}

我正在使用 gcc filename.c 编译并在 ubuntu 终端中使用 ./a.out 运行它。

谢谢你。

4

3 回答 3

2

当你这样做时:char *s="stackoverflow";那么s 是一个指向代码部分中的内存的指针,所以你不能改变它。因为它是只读的,所以在运行时会出现分段错误(如果使用const关键字,则会出现编译错误,这更好。所以const如果您不想对字符串进行更改,建议使用) .

如果这样做,char s[]="stackoverflow";s 是堆栈上的字符数组,因此您可以更改它。

于 2013-03-13T18:03:35.487 回答
1

您不应尝试更改字符串文字。如果要修改该值,请使用strcpy例如复制。

于 2013-03-13T18:04:05.137 回答
1

更改变量声明:

char s[] = "stackoverflow";

将消除您遇到的问题,因为变量将在进入范围时分配存储空间并使用给定的数据进行初始化。

于 2013-03-13T18:09:50.510 回答