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

C语言调用ctype库atoi函数异常,求字符串单数字求和的解决方法

问题排查与修复方案

现有代码存在的问题

  • atoi 函数传入参数错误:atoi 要求输入参数是以\0结尾的字符串指针,你传入的是单个char类型的字符,类型不匹配直接导致运行异常。单个数字字符转对应整数值直接用 字符 - '0' 即可,ASCII编码中数字字符是连续排列的,该计算可直接得到对应整数值。
  • 循环逻辑错误:数组input长度为15,合法下标范围是0~14,i<=15会触发数组越界访问;且不应该固定遍历16次,应该遍历到字符串结束符\0就终止,避免处理未初始化的内存内容。
  • 已废弃函数使用:gets函数存在严重的缓冲区溢出漏洞,已经从C标准中移除,建议替换为fgets。
  • 输出格式不符合要求:现有代码仅输出最终结果,没有实现数字1 + 数字2 + ... = 结果的打印逻辑。

修复后可运行代码

#include <stdio.h>
#include <ctype.h>

int main() {
    char input[15];
    printf("Write smth: ");
    // 用fgets替代gets,指定读取长度避免溢出
    fgets(input, sizeof(input), stdin);

    int i, result = 0;
    int first_digit = 1; // 标记是否是第一个数字,控制加号输出
    // 遍历到字符串结束符就停止
    for(i=0; input[i] != '\0'; i++)
    {
        if(isdigit(input[i]))
        {
            int num = input[i] - '0';
            result += num;
            if(first_digit) {
                printf("%d", num);
                first_digit = 0;
            } else {
                printf(" + %d", num);
            }
        }
    }
    printf(" = %d\n", result);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

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