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

开发日历程序时如何更新char monthName[256];变量?

解决C语言中字符串数组赋值的问题

嘿,这个问题我太熟了——C语言里字符串数组的赋值确实容易踩坑!你直接写monthName = "January"没用,是因为数组名本质上是个常量指针,你没法给它重新赋值指向另一个字符串字面量。咱们一步步来解决:

为什么直接赋值不行?

在C语言中,char monthName[256];定义了一个字符数组,monthName是这个数组首元素的地址,而且这个地址是不可修改的。而"January"是一个字符串字面量,它在内存中有自己的地址,你试图把这个地址赋值给monthName,就像给一个固定的门牌号码换地址一样,编译器肯定不允许。

两种可行的解决方案

方案1:使用strcpy()函数复制字符串

这是最常用的方法,需要包含<string.h>头文件,把字符串字面量的内容复制到你的数组里。示例代码如下:

#include <stdio.h>
#include <string.h>

int main() {
    int inputMonth;
    char monthName[256];

    // 假设你已经获取了用户输入的月份数字inputMonth
    switch(inputMonth) {
        case 1:
            strcpy(monthName, "January");
            break;
        case 2:
            strcpy(monthName, "February");
            break;
        case 3:
            strcpy(monthName, "March");
            break;
        // 依次补充4-11月的case
        case 12:
            strcpy(monthName, "December");
            break;
        default:
            strcpy(monthName, "Invalid Month");
            break;
    }

    printf("当前月份:%s\n", monthName);
    return 0;
}

方案2:改用指针变量存储月份名称

如果你不需要修改月份名称的内容(只是用来显示),可以把monthName改成const char*类型的指针,这样就能直接赋值字符串字面量了:

#include <stdio.h>

int main() {
    int inputMonth;
    const char* monthName;

    switch(inputMonth) {
        case 1:
            monthName = "January";
            break;
        case 2:
            monthName = "February";
            break;
        // 其他月份同理
        case 12:
            monthName = "December";
            break;
        default:
            monthName = "Invalid Month";
            break;
    }

    printf("当前月份:%s\n", monthName);
    return 0;
}

小提示

  • 如果用数组的方式,记得数组大小要足够容纳最长的月份名称(加上末尾的\0),你定义的256完全够用。
  • 使用strcpy()时要确保源字符串不会超过数组的容量,避免缓冲区溢出风险(不过月份名称都很短,这里不用担心)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:33:03