将char指针赋给char和char数组变量

时间:2013-03-15 03:19:19

标签: c pointers char

为什么以下确定?

    char *a;
    char b[]="asdf";
    a=b;

但以下不是?

    char a[10];
    char b[]="asdf";
    a=b;

上面给出了错误:赋值中的类型不兼容。

6 个答案:

答案 0 :(得分:1)

两者都不行。

也许你在尝试,

char *a;
char b[]="asdf";
a=b;

答案 1 :(得分:0)

char a;
char b[]="asdf";
a=b;

您在此处将数组b的地址分配给a类型的char。地址大小将是4个字节(64位m / c中的8个字节),您将其分配给1个字节char变量a,因此值将被截断。这是合法的,但没有用。

我认为您实际上是在尝试将b数组的第一个字符分配给a。那样做a = b[0]

答案 2 :(得分: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;

是不允许的。

答案 3 :(得分:0)

数组的值计算为数组中第一个元素的地址。所以基本上,它是一个恒定的价值。这就是为什么当你尝试在第二个例子中做a = b时,你试图做类似于2 = 7的事情,只有你有两个地址而不是2个整数。

现在有意义的是第一个例子可以工作,因为为指针分配地址是一个有效的操作。

答案 4 :(得分:0)

您需要在字符串库中包含以下标头。

select c.cust_num, c.cust_fname, cr.cnt from customer c join ( select cust_referred, count(*) as cnt, rank() over (order by count(*) desc) as rnk from customer group by cust_referred ) cr on cr.cust_referred = c.cust_num and cr.rnk = 1;

在有足够空间的情况下,使用#include <string.h>将字符串Y复制到字符串X。

答案 5 :(得分:-3)

请使用c ++的strcpy_s函数,它的语法为&amp; dest,* source可能有帮助。