我试过这样做但是出错了。为什么我不能这样做?
int main()
{
char sweet[5];
sweet = "kova";
printf("My favorite sweet is %s\n", sweet);
return 0;
}
答案 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";
但初始值设定项必须是常量值。
请注意,如果没有extern
,y
中的main()
将是未初始化的数组,与最后的y[]
不同。
答案 5 :(得分:0)
当您编写char str[5];
时,声明并定义一个包含五个字符的数组, define 表示str
存储一些内存地址并且可以'改变。
当您编写str = "hello"
时,您将字符串的不同地址分配给str
,这是不允许的。