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

C语言输入int类型年龄后输出异常大数值是什么原因?

问题原因

你遇到的异常是栈缓冲区溢出导致的内存覆盖问题,具体原因如下:

  • 字符串数组空间不足:代码中char name[] = ""的初始化方式,会让编译器将name数组的长度自动设为1,仅能容纳字符串结束符\0,没有多余空间存储用户输入的姓名。
  • 越界写入覆盖年龄变量:你输入的姓名name共4个字符,加上scanf读取字符串时自动追加的\0,总共需要5字节存储空间。超出name数组容量的内容会直接覆盖栈上和name相邻存储的age变量的内存,原本存入的20被异常内容覆盖,最终输出就变成了异常数值。
  • 额外语法错误:scanf("%s", &name);的写法有误,数组名本身就是首元素的内存地址,不需要额外加取地址符&,正确写法为scanf("%s", name);,不过这不是本次异常的核心诱因。

修复方案

给name数组设置足够的固定长度即可,同时建议增加输入长度限制避免溢出:

#include <stdio.h>
int main(){
    int age;
    // 设置足够大的数组容量
    char name[100] = "";
    printf("enter your age: ");
    scanf("%d", &age);
    printf("enter your name: ");
    // 限制读取长度不超过数组容量-1,避免溢出
    scanf("%99s", name);
    printf("your name is %s and you are %d years old.",name, age);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:54:03