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
相关产品推荐
相关产品推荐

