如果我想在不更改指针地址的情况下更改指向的值,我该怎么办?C,将一个指向的值赋给一个指向的值,比如* a = * b;
3,*d=*b
将在运行时返回分段错误。我认为这是因为*d
没有指向任何内存空间。这也解释了为什么2,工作。但是,对于1,*a
和*b
指向相同大小的内存,为什么它会在这里返回分段错误?
void main(void){
char *a="abcd";
char *b="1234";
char *c=(char *)malloc(sizeof(char));
char *d;
*a=*b; //1.segmentation fault
*c=*b; //2.ok
*d=*b; //3.segmentation fault
}
您不能更改字符串文字。任何尝试修改它们都会导致未定义的行为。此代码无法工作。 –
可能的重复[为什么在写入以“char \ * s”初始化但不是“char s \ [\]”的字符串时出现分段错误?](http://stackoverflow.com/questions/164194/为什么要做,我得到一个分割错误,当写入字符串初始化与cha),http://stackoverflow.com/questions/10202013/change-string-literal-in -c-through-pointer,http://stackoverflow.com/questions/1011455/is-it-possible-to-modify-a-string-of-char-in-c/1011481,http://stackoverflow.com/questions/480555/modify-c-string-constants –