将字符指针赋值给字符和字符数组变量

3
为什么以下内容是正确的?
    char *a;
    char b[]="asdf";
    a=b;

但以下内容不是吗?
    char a[10];
    char b[]="asdf";
    a=b;

上述代码出现错误:赋值时类型不兼容。

2
我觉得你的第一个例子至少会得到一些警告,这种情况不太可能发生。你能否发布编译器的完整输出? - adamdunson
4个回答

1

两者都不行。

也许你正在尝试,

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

1
实际上,第一个是合法的,但这可能不是想要的。 - congusbongus
@CongXu,是的,这些初学者必须知道,所有编译通过的代码并不一定是正确的!! - Barath Ravikumar
它可以是“正确的”。例如,如果'a'是一个指向int的指针,那么这将是一种可接受的做法。它能够编译而不出现警告的事实可能表明存在允许赋值的理由。 - user1952500

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

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

我认为您实际上是想将b数组的第一个字符分配给a。在这种情况下,请执行a = b [0]


0

数组的值被计算为数组中第一个元素的地址。因此,它基本上是一个常量值。这就是为什么在第二个例子中尝试执行a=b时,你会尝试类似于2=7的操作,只不过你有两个地址而不是2个整数。

现在第一个例子能够工作是有道理的,因为将地址分配给指针是一种有效的操作。


-1

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

#include <string.h>

如果有足够的空间,使用strcpy(strX, strY);将字符串Y复制到字符串X中。


strcpy() 不会 检查是否有足够的空间可用,实际上它没有办法这样做。您可以使用 strncpy() 来控制不会缓冲区溢出,但您可能需要手动插入最终的空字节。 - Åsmund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接