C 为什么下面的代码无效?

C 为什么下面的代码无效?,c,C,为什么下面的代码无效 void foo() { char hello[6]; char *foo = "hello"; hello = foo; } 但是下面的代码如何有效 void foo() { char hello[] = "hello"; char *foo = hello; } 您正在尝试将数组指定为指针。这是无效的。数组就像指针常量,因为它们不能用作左值——它们不能被重新分配指向其他地方。最接近的方法是将foo的内容复制到hello中 在第

为什么下面的代码无效

void foo()
{
    char hello[6];
    char *foo = "hello";
    hello = foo;
}
但是下面的代码如何有效

void foo()
{
    char hello[] = "hello";
    char *foo = hello;
}

您正在尝试将数组指定为指针。这是无效的。数组就像指针常量,因为它们不能用作左值——它们不能被重新分配指向其他地方。最接近的方法是将foo的内容复制到hello中


在第二种情况下,hello是一个字符数组,foo是一个指向字符的指针。通常,数组可以与相同类型的指针互换,因此这是有效的。

您正在尝试将数组指定为指针。这是无效的。数组就像指针常量,因为它们不能用作左值——它们不能被重新分配指向其他地方。最接近的方法是将foo的内容复制到hello中


在第二种情况下,hello是一个字符数组,foo是一个指向字符的指针。一般来说,数组可以与相同类型的指针互换,因此这是有效的。

我认为您假设字符串hello将被复制到hello。这是错误的。您正在尝试将指针分配给另一个指针。并且,您不能分配给hello

正确的方法是:

strcpy(hello, foo);

我想你应该把字符串hello复制到hello。这是错误的。您正在尝试将指针分配给另一个指针。并且,您不能分配给hello

正确的方法是:

strcpy(hello, foo);

在第一种情况下,将字符串分配给错误的foo指针。
在第二种情况下,您有一个char数组,并将其传递到foo指针中。在第一种情况下,您将字符串分配给错误的foo指针。 在第二种情况下,您有一个char数组,并将其传递给foo指针