显示错误:']'标记前期望表达式|
#include <stdio.h>
#include <stdlib.h>
int main(){
char myname[]="rahul";
int myage=20;
printf("My name is %s n",myname);
printf("My age is %d n",myage);
myname[]="sid";
myage=40;
printf("My name is %s n",myname);
printf("My age is %d n",myage);
return 0;
}
语法无效:
myname[]="sid";
索引数组时,必须给出一个值。你实际上是在给整个数组赋值,而不是一个元素,所以去掉括号。即使这样,也不能直接给数组赋值。
将字符串复制到char
数组中,使用strcpy
:
strcpy(myname, "sid");
char myname[]="rahul";
是一个声明——它声明myname
为char
的数组,用字符串"初始化;rahul
"。声明中[]
的存在只表明myname
具有数组类型;它不是试图索引到myname
。由于没有指定大小,因此大小取自初始化式的大小。逻辑上,这一行等价于
char myname[6];
myname[0] = 'r';
myname[1] = 'a';
myname[2] = 'h';
myname[3] = 'u';
myname[4] = 'l';
myname[5] = 0;
同时,
一行myname[]="sid";
是语句;您正试图将"sid"
分配给表达式myname[]
的结果,这有几个问题:
- 首先,
=
操作符不是为数组类型定义的——您不能使用它将一个数组的内容复制到另一个数组(字符串字量存储为字符类型的数组)。如果您试图将字符串"sid"
写入myname
,则需要使用strcpy
库函数:
其次,在表达式中,strcpy( myname, "sid" );
[]
不是用来指示数组类型的,它是用来访问数组的特定元素,不能为空——必须在那里有某种整数表达式(这是导致错误消息的原因)。
注意像
这样的东西myname[0] = "sid";
不起作用,因为类型不匹配。myname[0]
只引用数组中的单个字符,而不是整个数组。您不能将整个字符串存储为单个字符。编译器会抱怨你试图将char *
存储到char
。