我可以先声明一个数组并在以后给出它的值吗?
我试过这样做但是出错了。 为什么我不能这样做?
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";
但初始值设定项必须是常量值。 请注意,如果没有extern
, main()
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
指定一个不同的字符串地址,这是不允许的。