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

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

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

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

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

 strcpy(sweet,"kova"); 

您应该使用strcpy进行复制。 仅在定义数组时允许初始化

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

或者你可以这样做

 char sweet[] = "kova"; 

在C中,您无法使用assigment operator =为数组赋值 。 仅允许在定义时通过赋值进行初始化。

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

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

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

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

好吧,我想你正在尝试重新初始化字符数组。 在这种情况下:

为什么这是不可能的:

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

 sweet = "kova"; 

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

 char sweet[] = "kova"; 

初始化后,你不能将数组名称放在a =的左侧,这将是一个错误。

你应该做什么:

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

 #include #include //for strcpy method int main() { char sweet[5]; strcpy(sweet,"kava") printf("My favorite sweet is %s\n", sweet); return 0; } 

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

当你写char str[5]; ,你声明并定义一个包含五个字符的数组, define表示str存储一些内存地址,不能更改。

当你写str = "hello" ,你为str指定一个不同的字符串地址,这是不允许的。