使用char字符串与for循环输出星期几却得到(null)输出的问题
问题分析与修正方案
代码中的核心错误:
- 数组类型定义错误:
char string[7]是仅能存储7个单个字符的数组,无法容纳多个字符串。要存储一周七天的字符串,需定义字符指针数组char *string[7],或二维字符数组char string[7][20](20为足够容纳最长星期名称的长度)。 - 赋值类型不匹配:
"Monday"这类字符串字面量属于const char*类型指针,直接赋值给char类型的数组元素会导致指针地址被截断为单个字符,完全不符合存储字符串的需求。 - 循环越界访问:数组下标范围是0到6(共7个元素),但循环条件
i <=7会访问不存在的string[7],触发数组越界的未定义行为。
修正后的代码方案
方案一:使用字符指针数组
#include <stdio.h> int main() { int i; char *string[7]; string[0] = "Monday"; string[1] = "Tuesday"; string[2] = "Wednesday"; string[3] = "Thursday"; string[4] = "Friday"; string[5] = "Saturday"; string[6] = "Sunday"; for (i = 0; i < 7; i++) { printf("%s\n", string[i]); } return 0; }
方案二:使用二维字符数组
#include <stdio.h> int main() { int i; char string[7][20] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; for (i = 0; i < 7; i++) { printf("%s\n", string[i]); } return 0; }
内容的提问来源于stack exchange,提问作者user3943
相关产品推荐
相关产品推荐

