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

C语言如何通过索引字符串列表实现输入整数返回对应月份名称

问题原因分析

你的代码核心问题出在3个地方:

  1. 函数返回值类型错误:你定义的get_month返回值是char类型,只能存储单个字符,*months[m]等价于months[m][0],也就是取对应月份字符串的第一个字符,自然输出只有首字母。你要返回完整字符串,应该把返回值类型改成char*(字符串在C中是以\0结尾的char数组,用首地址即char*指针表示)。
  2. 打印占位符用错:打印单个字符用%c,打印完整字符串需要用%s占位符。
  3. 嵌套函数不符合C标准:你把get_month定义在main函数内部,这是部分编译器的扩展特性,不是标准C支持的写法,建议把函数定义挪到main外部。
修正后的可运行代码(短月份版本)
#include <stdio.h>

// 月份缩写数组,每个元素是char*类型的字符串
const char *months[12] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};

// 函数返回值为char*类型,对应完整字符串,补充边界判断避免输入越界
const char* get_month(int m) {
    if (m < 0 || m > 11) {
        return "Invalid month";
    }
    return months[m];
}

int main() {
    for (int i = 0; i < 12; i++) {
        // 接收返回值用const char*类型,不是char
        const char *this_month = get_month(i);
        // 打印字符串用%s占位符,i+1对应大众习惯的1-12月编号
        printf("Month %d is %s\n", i+1, this_month);
    }
    return 0;
}
变长月份全称的实现方法

你不需要修改任何逻辑,直接替换months数组的内容即可。C语言中char*类型的指针只负责存储字符串的首地址,不管指向的字符串实际长度,打印时%s会自动读取到字符串末尾的\0结束,天然支持不同长度的字符串。
示例全称数组如下,其余代码和短月份版本完全一致:

const char *months[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
之前修改数组出现警告的原因

你把数组声明为*months[12][3]属于没必要的错误修改,原本的char* months[12]已经是正确的字符串数组声明。同时你的函数返回值还是char类型,返回字符串指针months[m]时,编译器会把指针强制转成char类型,自然会报类型转换的警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:03:00