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

基于char数组的二进制加法C语言代码输出异常问题求解

代码问题修复方案

核心错误原因

  • 二进制位赋值时直接存入整型数值0/1,未转为可打印的ASCII字符'0'/'1',删除sprintf后输出乱码就是因为数组中存储的是不可见控制字符。
  • 循环内的sprintf(Snum, "%d", num)完全多余,每次执行都会用当前单个数字的字符串覆盖Snum的开头位置,最后一次循环结束后Snum直接被改写为仅包含"1"和结束符,因此最终仅输出1。
  • 未主动给存储结果的字符数组补充字符串结束符'\0',printf输出字符串时存在内存越界风险。

修改后的完整代码

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <stdio.h>

int main(){
    char Pbuf8[9] = {"01100000"};
    char Mbuf4[10] = {"01110000"};

    int num = 0;
    char Snum[9] = {0};
    int carry = 0;

    for(int c = 7; c >= 0; c--){
        // 字符转整型后相加
        num = (Pbuf8[c] - '0') + (Mbuf4[c] - '0') + carry;

        // 二进制加法运算
        if(num == 1){
            Snum[c] = num + '0';
            carry = 0;
        }else if(num == 2){
            Snum[c] = '0';
            carry = 1;
        }else if(num == 3){
            Snum[c] = '1';
            carry = 1;
        }
    }
    // 补充字符串结束符
    Snum[8] = '\0';
    // 输出结果
    printf("%s", Snum);

    return 0;
}

运行后可得到预期输出00001011。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:15:05