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

C语言不使用额外函数分割注册码提取批次号与e number问题

问题分析与修复方案

核心问题点

  • 字符串缓冲区未预留空终止符位置:C语言字符串需要以\0结尾才能被printf("%s")正确识别,你当前定义的batchNo[2]仅能存储2位字符,没有多余空间存终止符,eNO[3]同理,会导致输出时越界访问内存出现乱码。
  • 拆分完成后未手动添加字符串终止符:即使扩大缓冲区,你当前的赋值逻辑仅填充了数字位,没有主动给两个目标数组末尾加\0,同样会触发字符串读写越界。
  • 输入读取存在溢出风险:scanf("%s", enumber)没有限制输入长度,当用户输入超过8位字符时会溢出enumber的9字节缓冲区。
  • 循环逻辑冗余:注册码是固定M/XX/XXX格式,不需要循环判断位置,直接按索引取值即可,避免逻辑出错。

修复后代码

#include <stdio.h>

int main() {
    char enumber[9];
    char batchNo[3]; // 2位批次号+1位终止符
    char eNO[4]; // 3位e number+1位终止符

    printf("Enter the Registration Number: ");
    // 限制输入长度避免缓冲区溢出
    scanf("%8s", enumber);
    printf("输入的注册码:%s\n", enumber);

    // 按固定格式拆分批次号(索引2、3位)
    batchNo[0] = enumber[2];
    batchNo[1] = enumber[3];
    batchNo[2] = '\0'; // 手动添加字符串终止符

    // 拆分e number(索引5、6、7位)
    eNO[0] = enumber[5];
    eNO[1] = enumber[6];
    eNO[2] = enumber[7];
    eNO[3] = '\0'; // 手动添加字符串终止符

    printf("批次号:%s\n", batchNo);
    printf("e number:%s\n", eNO);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:06:03