为什么以下确定?
char *a;
char b[]="asdf";
a=b;
但以下不是?
char a[10];
char b[]="asdf";
a=b;
上面给出了错误:赋值中的类型不兼容。
答案 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可能有帮助。