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

C语言代码可在在线编译器运行,在Visual Studio 2019出现C2440/C2447报错排查

C程序在Visual Studio 2019环境的编译报错修复方案

初始C2440、C2447报错根因与修复

两类初始报错的触发位置为char* month_name[]数组的初始化段。
VS2019 默认开启C语言严格类型校验,C标准中字符串字面量的类型为const char[],直接赋值给非const的char*指针会触发类型不匹配类错误C2440,后续连带出现语法边界识别错误C2447。
修复方式:将数组声明修改为const char* month_name[],即可完全消除这两个初始报错。

加const修饰后衍生警告、错误的逐类修复

C4101 未引用局部变量警告

这类警告对应声明后全程未使用的冗余局部变量,直接删除对应声明即可消除,涉及变量清单:

  • printday函数内声明的t、r变量,无任何读写操作
  • main函数内声明的leapyear、weekdays变量,无任何读写操作

C4700 未初始化局部变量使用错误

所有该类错误均为变量声明后未赋值就直接参与运算/作为参数传入,对应逐位置修复:

  1. printday函数内的year变量:当前代码直接使用未赋值的year做闰年判断、星期值计算,需在函数内补充年份输入逻辑,完成赋值后再参与运算
  2. main函数内的firstday、p变量:当前调用occurrenceDays(p, firstday)时直接传入未初始化的两个变量,需补充赋值:
    • p:承接用户输入的月份值,将已经读取到的month值赋值给p
    • firstday:承接前文已经计算得到的当年首日星期值,将start_day的计算结果赋值给firstday
  3. occurrenceDays函数内的year局部变量:当前调用get_first_start_day(year)时传入未初始化的局部变量,需将main函数中已经读取的年份值作为函数参数传入,不要在函数内单独声明无赋值的year变量

C4716 printday 必须返回值的错误

printday函数的声明返回值类型为int,但函数内部没有任何返回语句。
修复:将函数声明修改为void printday(void),匹配函数实际无返回值的运行逻辑。

同步需修正的逻辑类问题(在线编译器因关闭严格校验未暴露)

  • occurrenceDays函数中if (firstday == days[i][10])判断逻辑存在严重错误:取的是二维字符数组越界位置的单字符值,和整型的星期索引firstday无法完成匹配,需将参数firstday的类型从char修改为int,直接对比整型星期索引即可
  • display_month_calendar函数的第一个入参days无实际作用,函数内循环会直接读取全局month_days表计算天数,可将入参简化为无参数形式,避免入参传入混淆

注:以上修复完成后,代码可在VS2019 以默认严格校验模式正常编译运行,和在线编译器运行逻辑保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 11:15:06