将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可能会有所帮助。