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

C语言编写限制名字输入长度程序及现有代码运行异常问题排查

问题修复方案

现有代码的错误原因

  • 缓冲区溢出问题:C 语言字符串必须以\0作为结束标记,你声明的char firstname[5]仅能存储4个有效字符,剩余1个位置留给结束符。输入newton共6个字符,超出数组容量后会覆盖栈上其他内存数据,直接导致输出乱码、程序行为异常。
  • scanf用法错误:数组名firstname本身就是首元素的内存地址,不需要额外加取地址符&,虽然部分场景下加了也能运行,但属于类型不匹配的错误写法。
  • 无输入长度限制:默认的%s格式符不会检查缓冲区容量,会把所有输入的非空白字符全部写入目标数组,是典型的缓冲区溢出安全漏洞。

实现10字符长度限制的修复代码

#include <stdio.h>
int main()
{
    // 10个有效字符 + 1个结束符预留位,数组长度设为11
    char firstname[11];
    printf("Enter your name: ");
    // %10s 限制最多读取10个非空白字符,自动预留结束符存储位置
    scanf("%10s", firstname);
    printf("\nYour name: %s", firstname);
    return 0;
}

可选优化逻辑

如果需要处理用户输入超出10个字符的场景,避免剩余字符残留在输入缓冲区影响后续操作,可以在scanf后补充清空缓冲区的代码:

// 清空输入缓冲区剩余未读字符
int c;
while ((c = getchar()) != '\n' && c != EOF);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:15:03