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
相关产品推荐
相关产品推荐

