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

C语言调用scanf报C4477错误崩溃,%d要求int*类型怎么处理

问题解答

什么是int*类型

int是C语言中的指针类型,专门用于存储int类型变量的内存地址。普通int变量存储的是实际的整数值,而int变量存储的是某个int变量在内存中的存放位置。

报错原因分析

C4477是Visual Studio的编译告警(常被设置为错误阻断编译),触发原因和提示完全一致:scanf的%d格式符要求对应传入的参数是int*类型(即int变量的地址),你直接传入了int类型的变量本身,属于参数类型不匹配。
scanf的设计逻辑是要直接修改传入变量的取值,必须拿到变量的内存地址才能往对应地址写入用户输入的内容。直接传变量值的话,scanf会把这个值当成内存地址去访问,大概率会触发非法内存访问,导致运行时程序直接崩溃。

代码修正方案

只需要给所有scanf语句中传入的int变量前加取地址符&即可,&的作用是获取变量的内存地址,得到的结果刚好是%d要求的int*类型。
修正后的完整代码如下:

int main()
{
    int hour, min, car;

    printf("-------------------------------------\n");
    printf("\n주차요금 계산 프로그램\n");
    
    printf("\n주차 시간을 입력하세요.\n\n   시간:\n");
    scanf("%d", &hour);
    
    printf("\n   분:\n");
    scanf("%d", &min);

    printf("\n%d시간 %d분\n", hour, min);
    printf("\n당신의 차종은 무엇입니까?\n");
    printf("\n 1.경차   2.기타\n");
    scanf("%d", &car);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:54:03