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";
这将声明一个本地数组并用字符串的内容初始化它(这不同于声明指向字符串的指针)
如果我想改变指向的值而不改变指针的地址,我应该怎么做?
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";
这将声明一个本地数组并用字符串的内容初始化它(这不同于声明指向字符串的指针)