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

C语言字母转二进制后输出多余数字,请求代码问题排查帮助

问题排查与修复

核心问题分析

你看到的额外数字是未初始化数组的垃圾值,根源集中在这几点:

  1. 函数名不匹配:你定义的转换函数叫convert,但main里调用的是encode_char,这会导致编译失败;就算侥幸编译通过,bits1数组也不会被赋值。
  2. 转换函数未填充目标数组:convert函数只是直接打印二进制字符,完全没把结果写入传入的bits数组。bits1是未初始化的局部数组,内存里存的是随机值,循环打印自然会输出乱码。
  3. 参数命名错误:const char char里的char是C语言关键字,不能用作变量名,这会触发编译错误。
  4. 语法错误:return0缺少空格,应为return 0;。

修复后的代码

#include <stdio.h>
#include <stdbool.h>

// 修正参数名,同时将转换结果写入bits数组
void encode_char(const char input_char, bool bits[8]) {
    char c = input_char;
    for (int j = 7; j >= 0; j--) {
        if (c >= (1 << j)) {
            c -= (1 << j);
            bits[7 - j] = true; // 按顺序填充数组(高位到低位对应数组索引0到7)
            printf("1");
        } else {
            bits[7 - j] = false;
            printf("0");
        }
    }
    printf("\n\n");
}

int main() {
    bool bits1[8];
    encode_char('A', bits1);
    // 现在打印的是正确赋值后的数组内容
    for (int i = 0; i < 8; i++) {
        printf("%d", bits1[i]);
    }
    printf("\n");
    return 0;
}

关键修复说明

  • 统一函数名为encode_char,确保调用与定义一致。
  • 将参数名char替换为合法名称input_char。
  • 在转换函数中,每判断一位二进制值,就将对应的true/false写入bits数组,而非仅打印。
  • 修正return0的语法错误。

运行修复后的代码,bits1数组会被正确填充'A'(ASCII码65,二进制01000001)的对应值,循环打印时不会再出现随机额外数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:50:13