为什么以下代码无效?

时间:2013-03-19 11:56:24

标签: c

为什么以下代码无效?

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

但以下代码如何有效?

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

3 个答案:

答案 0 :(得分:3)

您正在尝试将数组指定为指针。这是无效的。数组就像指针常量一样,它们不能用作左值 - 它们不能被重新分配以指向其他地方。你可以得到的最接近的是将foo的内容复制到你好。

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

答案 1 :(得分:3)

我认为你应该将字符串"hello"复制到hello。这是不对的。您正在尝试将指针指定给另一个。而且,您无法分配到hello

正确的方法是:

strcpy(hello, foo);

答案 2 :(得分:0)

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