将char指针赋给char和char数组变量
为什么以下确定?
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
地址分配给char
类型。 地址大小将是4个字节(64位m / c中的8个字节),您将其分配给1个字节的char
变量a
因此值将被截断。 这是合法的,但没有用。
我想你实际上是在尝试将b
数组的第一个字符分配给a
。 那样做a = b[0]
。
当你说
char a[10];
实际上是’a’
char * const a = malloc(sizeof(char) * 10); // remember to free it, can use alloca() instead
并且’a’被初始化为指向已分配内存的10 * sizeof(char)。
所以
a[1] = 't'; *(a + 1) = 't';
被允许。 但
char *b = "some string"; a = b;
不被允许。
数组的值计算为数组中第一个元素的地址。 所以基本上,它是一个恒定的价值。 这就是为什么当你尝试在第二个例子中做a = b时,你试图做类似2 = 7的事情,只有你有两个地址而不是2个整数。
现在有意义的是第一个例子可以工作,因为为指针分配地址是一个有效的操作。
请使用c ++的strcpy_s函数,它的语法为&dest,* source可能会有所帮助。