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
相关产品推荐
相关产品推荐

