在c中操纵char *

时间:2013-03-13 18:01:30

标签: c

这是我的程序,当我尝试s [0] = s [1]时它是seg faulting。 我不明白为什么这不起作用,因为我所做的就是在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运行它。

谢谢。

3 个答案:

答案 0 :(得分:2)

执行:char *s="stackoverflow";时, s是指向代码部分中的内存的指针,因此您无法更改它。因为它是只读,所以你在运行时遇到分段错误(如果使用了const关键字,你会得到编译错误,这样会更好..所以建议使用如果您不想对字符串进行更改,请const

如果您执行char s[]="stackoverflow";,那么 s是堆栈中的字符数组,因此您可以更改它。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

更改变量声明:

char s[] = "stackoverflow";

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