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

C语言遍历字符串数组赋值时出现array initializer相关报错原因是什么

错误原因

array initializer must be an initializer list or string literal

  • C 语法规定,char word[] 这种字符数组的初始化场景,仅支持两种赋值来源:花括号包裹的初始化列表,或者双引号包裹的字符串字面量。你代码里的list[i]是const char*类型的指针,不属于上述两类合法的初始化值,编译器既无法自动推断数组的分配长度,也无法自动完成字符串内容的拷贝,因此直接抛出编译错误。
解决方案

根据你的使用场景可以选择以下任意一种方案:

  1. 仅读取字符串无需修改:直接用指针接收即可,无需额外开辟数组空间
    修改对应行代码为:
const char *word = list[i];

这种方案改动最小,性能损耗最低,满足仅打印等只读场景的需求。

  1. 需要修改word存储的字符串内容:手动申请空间并拷贝字符串
    需要先引入<string.h>头文件,可选两种实现方式:
  • 方式A:用strdup快速完成拷贝(自动申请堆内存,用完需手动释放)
char *word = strdup(list[i]);
// 中间执行你的修改、打印逻辑
free(word); // 避免内存泄漏
  • 方式B:栈上开辟固定长度数组拷贝(无需手动释放,适合长度可预估的场景)
    你当前数组中最长的字符串长度不超过32,直接开辟足够大的固定数组即可:
char word[64] = {0};
strcpy(word, list[i]);

如果你的编译器支持C99及以上标准,也可以用可变长数组动态适配长度:

int len = strlen(list[i]);
char word[len + 1];
strcpy(word, list[i]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:45:03