我可以先声明一个数组并在以后给出它的值吗?

时间:2015-08-04 12:02:00

标签: c arrays initialization assignment-operator

我试过这样做但是出错了。为什么我不能这样做?

int main()
{
char sweet[5];
sweet = "kova";
printf("My favorite sweet is %s\n", sweet);

return 0;
}

6 个答案:

答案 0 :(得分:8)

不,你不能。仅仅因为数组名称是不可修改的l值。在任何表达式中都不能用作左操作数。因此,您无法将其保留在=表达式的左侧。

但是,如果要将字符串kova复制到数组sweet[],可以像这样使用strcpy()

strcpy(sweet,"kova");

答案 1 :(得分:7)

您应该使用 strcpy 进行复制。仅在定义数组

时才允许初始化
int main()
{
char sweet[5];
strcpy(sweet,"kova");
printf("My favorite sweet is %s\n", sweet);

return 0;
}

或者你可以这样做

char sweet[] = "kova";

答案 2 :(得分:1)

在C中,您不能使用分配运算符= 为数组分配值。只允许在定义时通过赋值进行初始化。

您可能希望使用strcpy()将内容复制到阵列。

答案 3 :(得分:1)

嗯,我想您正在尝试重新初始化字符数组。在那种情况下:

为什么这是不可能的:

无法以正常方式修改数组。通过以下声明:

sweet = "kova";

你的意思是指针甜点现在应指向"kova"的第一个不可能的索引。您只能在声明时初始化它,即以下代码可以正常工作。

char sweet[] = "kova";

初始化后,您无法在=的左侧放置数组名称,这将是一个错误。

你应该做什么:

所以很明显,我们不能简单地修改数组的值,但是你可以使用内置函数来完成这样的任务。在您的情况下,strcpy将为您完成工作。这是对代码的重写尝试:

#include<stdio.h>
#include<string.h>  //for strcpy method
int main()
{
    char sweet[5];
    strcpy(sweet,"kava")
    printf("My favorite sweet is %s\n", sweet);

    return 0;
}

如果您仍然遇到任何问题,请告诉我。

答案 4 :(得分:1)

严格地说,您可以声明一个数组,并在以后定义它:

#include <stdio.h>
char x[];
int main() {
  extern char y[6];
  puts(x);
  puts(y);
}
char x[6] = "hello";
char y[6] = "world";

但初始值设定项必须是常量值。 请注意,如果没有externy中的main()将是未初始化的数组,与最后的y[]不同。

答案 5 :(得分:0)

当您编写char str[5];时,声明并定义一个包含五个字符的数组, define 表示str存储一些内存地址并且可以'改变。

当您编写str = "hello"时,您将字符串的不同地址分配给str,这是不允许的。