如果我想在不改变指针地址的情况下更改指向值,我该怎么办?
在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
}
答案 0 :(得分:2)
常量字符串通常存储在只读存储器中,您无法修改它们。
要使它们可写,请先创建一个副本:
char *a = strdup("abcd");
答案 1 :(得分:1)
这是因为"abcd"
等字符串在C中是常量。尝试修改字符串是未定义的行为。
如果你想让字符串可以修改,你必须这样声明:
char a[] = "abcd";
这将声明一个本地数组并用字符串的内容初始化它(这与声明指向字符串的指针不同)