为什么以下没问题?
char *a;
char b[]="asdf";
a=b;
但下面不是吗?
char a[10];
char b[]="asdf";
a=b;
以上给出了错误:分配中的类型不兼容。
两个都不行。
也许你在尝试,
char *a;
char b[]="asdf";
a=b;
char a;
char b[]="asdf";
a=b;
在这里,您正在分配类型的数组b
的地址。地址大小将为 4 个字节(64 位 m/c 中的 8 个字节),您将其分配给 1 个字节变量,因此值将被截断。这是合法的,但没有用。a
char
char
a
我认为您实际上是在尝试将b
数组的第一个字符分配给a
. 在那种情况下做a = b[0]
。
数组的值计算为数组中第一个元素的地址。所以基本上,它是一个常数值。这就是为什么当您尝试在第二个示例中执行 a=b 时,您正在尝试执行类似于 2=7 的操作,只是您有两个地址而不是 2 个整数。
现在第一个示例可以工作是有道理的,因为将地址分配给指针是有效的操作。
您需要为字符串库包含以下标头。
#include <string.h>
strcpy(strX, strY);
如果有足够的空间,使用会将字符串 Y 复制到字符串 X 中。
请使用 c++ 的 strcpy_s 函数,它的语法为 &dest,*source 它可能会有所帮助。