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

C语言字符串数组无法打印元素,代码存在什么错误?

代码中的错误分析与修正

你的代码存在两个核心错误,导致程序无法正常输出:

1. 数组类型定义错误

char day[7] 声明的是单个字符的数组,每个元素仅能存储1个char类型的数据(比如'a'、'5'这类单个字符)。但你用字符串字面量(比如"Saturday"是包含终止符'\0'的长度为9的字符串)去初始化,类型完全不匹配,会触发未定义行为。

2. 初始化逻辑错误

当你用字符串字面量初始化char day[7]时,编译器会尝试把每个字符串的首地址(指针值,通常占4/8字节)拆分成单个字节存入数组元素,这不仅会导致内存溢出,后续访问day[0]时,printf("%s")会把这个错误存储的字节值当作字符串指针去读取,直接访问非法内存,最终导致程序崩溃或输出乱码。


修正方案

有两种常见的正确写法:

方案一:使用字符指针数组(推荐)

用指针数组指向字符串字面量,无需额外分配内存,效率更高,同时加上const避免误修改只读的字符串字面量:

#include <stdio.h>
int main(){
    const char *day[7] = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
    printf("%s\n", day[0]);
    return 0;
}

方案二:使用二维字符数组

为每个字符串分配足够的存储空间,第二维的大小要能容纳最长的字符串(包括终止符'\0',比如"Wednesday"需要10个字节):

#include <stdio.h>
int main(){
    char day[7][10] = {"Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
    printf("%s\n", day[0]);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:05:15