You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编译报错:expected expression before ']' token 问题求助

解决C语言编译错误:expected expression before ']' token

嘿,这个错误我太熟了——问题就出在你代码里的这一行:myname[]="sid";,这完全是C语言语法不允许的写法,编译器根本搞不懂你想干嘛,所以才抛出了expected expression before ']' token的错误。

为什么会错?

当你用char myname[]="rahul";声明并初始化字符数组时,这是数组定义阶段的语法——编译器会自动根据字符串长度给数组分配足够的内存,并把字符串内容填进去。但一旦数组定义完成,你就不能再用数组名[]=新值这种方式去修改它了,[]在这里没有任何意义,属于语法错误。

两种修复方案

方案1:用strcpy修改字符数组内容(推荐)

这是修改字符数组内容的标准做法,需要引入<string.h>头文件来使用strcpy函数,它会把新字符串的每个字符逐个复制到数组的内存空间里。

修正后的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // 必须包含这个头文件才能使用strcpy

int main(){
    char myname[]="rahul";
    int myage=20;
    printf("My name is %s \n",myname);
    printf("My age is %d \n",myage);
    
    strcpy(myname, "sid"); // 用strcpy替换数组内容
    myage=40;
    
    printf("My name is %s \n",myname);
    printf("My age is %d \n",myage);
    return 0;
}

注意:要确保数组的大小足够容纳新字符串(包括末尾的\0终止符),这里myname初始是6个字节("rahul"5个字符加\0),"sid"只需要4个字节,完全没问题。

方案2:改用字符指针

如果你只是想切换字符串的指向,不需要修改字符串内容,可以把myname改成字符指针:

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

⚠️ 注意:这种方式里,"rahul"和"sid"都是只读字符串常量,你不能修改它们的单个字符(比如myname[0]='S'会导致程序崩溃),只是改变了指针的指向。如果需要修改字符串内容,优先用方案1。

内容的提问来源于stack exchange,提问作者Sid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 03:12:44