C、将一个指向的值赋给一个指向的值,如*a=*b;

C, assign a pointed value to a pointed value, like *a=*b;

如果我想改变指向的值而不改变指针的地址,我应该怎么做?

3、*d=*b会在运行次后return段错误。我认为这是因为 *d 没有指向任何内存 space。这也解释了为什么 2, 有效。但是,对于 1,*a*b 指向相同大小的内存,为什么这里会 return 分段错误?

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 *a = strdup("abcd");

这是因为 "abcd" 等字符串在 C 中是常量。尝试修改一个是未定义的行为。

如果你希望字符串是可修改的,你必须这样声明:

char a[] = "abcd";

这将声明一个本地数组并用字符串的内容初始化它(这不同于声明指向字符串的指针)