c语言中的char *a,*b; strcpy(a,b);与a=b;有什么区别?

如题所述

char *a,*b; //说明定义的是两个char型指针变量
strcpy(a,b); //此处用法是错误的,strcpy是字符串拷贝,a,b是指针a,b的地址,不是字符型的
char a,b; //说明定义的是两个char型变量
strcpy(a,b); //此处将b的值赋值给a
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-09-23
有区别的,strcpy是将b指向的字符串的内容复制给a指向的地址,而a = b只是将a指向b指向的地址,现在它们指向同一个地址,但是你这里面的指针定义后它们都没有指向合法的地址,指向的不是合法的字符串,所以调用strcpy(a,b)会出问题的追问

程序中b字符串有赋值,只是发现这两种写法不能互换,互换会有错

追答

是的,这两种有很大的差异,strcpy相当于以'\0'作为边界的内存复制,而a = b在32位机上实质上是一个4字节变量的赋值操作,与int a, b; a = b在本质上是一样的,当然也可以说这是4字节的内存复制^-^

第2个回答  推荐于2016-09-10
strcpy是拷贝,从b地址开始取字符,一个一个复制到从a开始的地址上。最后你获得了两个相同字符串,a和b分别指向两个字符串

a = b,是修改a的地址,让a指向b所在的位置。最后你只有一个字符串,a和b都指向这个字符串。本回答被提问者采纳
第3个回答  2012-09-23

    strcpy(a,b)是把b指向的字符串复制到a所指向的地址中,这样改变a,b互不影响

    a = b是将a指针指向b所代表的字符串,实际上改变a所指向的内容,b也改变了

第4个回答  2012-09-23
a=b;只是a指向了b指向的内存地址,一旦b销毁,a的内容也消失了。
strcpy(a,b)是将b指向的内存地址里的内容赋值到a指向的内存地址,这样b销毁时不影响a的内容。追问

理论上是这样,我也这样认为,但这个程序的结果,对b重新赋值后a的值却不变#include "stdio.h" #include "string.h" main() { char *b="abcdefg",*a; a=b; b="o"; printf("%s\n",b); printf("%s\n",a); }

相似回答