C语言遍历字符串数组赋值时出现array initializer相关报错原因是什么
错误原因
array initializer must be an initializer list or string literal
- C 语法规定,
char word[]这种字符数组的初始化场景,仅支持两种赋值来源:花括号包裹的初始化列表,或者双引号包裹的字符串字面量。你代码里的list[i]是const char*类型的指针,不属于上述两类合法的初始化值,编译器既无法自动推断数组的分配长度,也无法自动完成字符串内容的拷贝,因此直接抛出编译错误。
解决方案
根据你的使用场景可以选择以下任意一种方案:
- 仅读取字符串无需修改:直接用指针接收即可,无需额外开辟数组空间
修改对应行代码为:
const char *word = list[i];
这种方案改动最小,性能损耗最低,满足仅打印等只读场景的需求。
- 需要修改
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
相关产品推荐
相关产品推荐

