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

C语言char数组字符修改失效:输入32位全0串输出无变化如何解决?

逻辑异常原因
  • 核心错误为字符翻转的分支判断逻辑错误:两段if判断为顺序执行关系,无互斥限制。当字符初始值为'0'时,第一个if会将其改写为'1',紧接着第二个if会命中新的'1'值,再次将其改写回'0',最终表现为翻转无效果。
  • 存在未定义行为风险:arr数组未做初始化,若输入字符串长度不足32位,未赋值的数组位置为随机垃圾值,输出会出现乱码。
修复方案

将翻转逻辑的两个if调整为互斥分支即可,参考修复后代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("请输入32位01字符串参数\n");
        return 1;
    }
    char *a = argv[argc-1];
    // 初始化数组避免垃圾值
    char arr[33] = {0};

    size_t length = strlen(a);
    // 限制长度避免越界
    size_t copy_len = length > 32 ? 32 : length;
    for(size_t i=0;i<copy_len;i++) {
        arr[i]=a[i];
    }
    for(int j=0; j<32;j++) {
        if(arr[j]=='0') {
            arr[j]='1';
        }
        // 改为else if 实现互斥判断
        else if(arr[j]=='1') {
            arr[j]='0';
        }
    }
    for(int k=0;k<32;k++) {
        printf("%c",arr[k]);
    }
    return 0;
}
可选简化写法

翻转逻辑也可以用ASCII码特性简化,'0'和'1'的ASCII码只差1,可以直接用异或操作实现翻转:

for(int j=0; j<32;j++) {
    if (arr[j] == '0' || arr[j] == '1') {
        arr[j] ^= 1;
    }
}

内容的提问来源于stack exchange,提问作者Heavenguard.01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:24:03