错误:令牌']'之前的预期表达式|

  • 本文关键字:表达式 令牌 错误 c
  • 更新时间 :
  • 英文 :


显示错误:']'标记前期望表达式|

#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";

是一个声明——它声明mynamechar的数组,用字符串&quot初始化;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

最新更新