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

C语言Void函数输出数组垃圾值问题求助:如何获取正确结果

解决expand函数输出垃圾值的问题

嘿,我来帮你排查下这个问题!从你贴的代码来看,expand函数本身的赋值逻辑没什么语法问题,输出垃圾值大概率是输入数据的问题,咱们一步步来梳理:

核心问题:传入expand的r数组是未初始化的垃圾值

你在main里只声明了r[7],但完全没给它赋值——栈上的局部数组默认会残留随机的垃圾数据。expand函数拿着这些无效数据去填充eR,输出自然是乱码。

比如你如果直接调用expand(r, eR)但没给r塞有效字符,那r[0]到r[5]都是内存里的随机值,处理后eR肯定不对。

修复步骤&代码示例

1. 先给r数组赋值有效内容

在调用expand前,你需要把r填充成符合预期的字符数组,比如:

// 示例:给r赋值6个有效字符(r是[7],刚好能存6个字符+终止符)
strcpy(r, "abcdef");

2. 补充expand的调用逻辑

你目前的main代码还没写完,得加上调用expand的代码才能让它工作。完整的main可以改成这样:

int main(){
    char bitMessage[13],key[10],l[7],r[7] = {0},xResult,eR[9] = {0}; // 初始化数组避免垃圾值
    char *temp=eR;
    int i;
    char *fResult;
    
    // 给r数组填充有效测试内容
    strcpy(r, "abcdef");
    
    // 调用expand函数处理
    expand(r, eR);
    
    // 额外在main里验证结果(可选)
    printf("\nMain中验证结果: %s", eR);
    
    printf("\nEnter Me...");
    // 这里可以继续补充你的输入逻辑
    return 0;
}

3. 可选:给expand加参数校验(增强健壮性)

可以在expand里加个简单的判断,避免传入无效的r数组:

void expand(char r[7], char *eR){
    // 校验r是否有有效内容(根据你的需求调整判断条件)
    if (r[0] == '\0' || r[5] == '\0') {
        printf("Error: r数组未正确初始化!\n");
        return;
    }
    
    // 原赋值逻辑(也可以用数组下标写法,更直观)
    eR[0] = r[0];
    eR[1] = r[1];
    eR[2] = r[3];
    eR[3] = r[2];
    eR[4] = r[3];
    eR[5] = r[2];
    eR[6] = r[4];
    eR[7] = r[5];
    eR[8] = '\0';
    
    printf("Expanded: %s",eR);
}

验证效果

当你给r赋值abcdef后,expand输出的结果应该是abdcdcef,这就是符合你逻辑的正确结果啦。

内容的提问来源于stack exchange,提问作者Harvey Jay Barrete CARESOSA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:57:42