C语言字符串数组无输出问题排查:管理员账号密码代码异常
问题分析与修复方案
你的代码存在多个关键错误,导致编译失败或无预期输出,逐一拆解如下:
- 函数名大小写不匹配:C语言严格区分大小写,你定义的函数是
Listofadmins,但主函数中调用的是listofadmins,编译器会因找不到该函数直接报错,程序根本无法运行。 - 函数传参类型错误:
Listofadmins的第二个参数要求是二维字符数组(char inpstring[][50]),但你调用时传入的str[10]是str数组的第11个一维元素(类型为char[100]),类型不匹配导致函数内部的strcpy操作完全没有修改到主函数的str数组,反而可能触发未定义行为。正确传参应直接传入二维数组名str。 - for循环初始化冗余:
for(j = 0, k, y; ...)中的k, y属于无效的逗号表达式,虽然你在循环外已初始化k=0、y=1,但此处写法不规范且无意义。 void main不符合C标准:C语言标准规定main函数的返回类型必须是int,正确写法为int main(void),并在末尾添加return 0;。- 函数内部索引硬编码易出错:原函数中直接硬编码
inpstring[2]、inpstring[3]等索引,逻辑不够清晰,容易因循环调用导致索引混乱。
修复后的代码
#include <stdio.h> #include <string.h> void Listofadmins(int index, char inpstring[][100]){ // 通过index计算起始索引,避免硬编码 int start_idx = index * 2; if(index == 0){ strcpy(inpstring[start_idx], "Carl01"); strcpy(inpstring[start_idx + 1], "SVm6u&N591s2"); } else if(index == 1){ strcpy(inpstring[start_idx], "Devoth754"); strcpy(inpstring[start_idx + 1], "eeKS7@8%0@T6"); } else if(index == 2){ strcpy(inpstring[start_idx], "David439"); strcpy(inpstring[start_idx + 1], "l$z7eqV2aD00"); } else if(index == 3){ strcpy(inpstring[start_idx], "Matt208"); strcpy(inpstring[start_idx + 1], "h9Je2#Ri3or$"); } } int main(void) { int j, k = 0, y = 1; char str[100][100]; for(j = 0; j < 4; j++, k += 2, y += 2){ Listofadmins(j, str); printf("账号:%s\n密码:%s\n\n", str[k], str[y]); } return 0; }
修复说明
- 统一函数名大小写,确保调用与定义一致;
- 修正传参为
str,让函数能正确操作主函数的二维数组; - 将函数参数的数组维度改为
[][100],与主函数的str数组维度匹配,避免潜在的内存访问问题; - 用
start_idx = index * 2计算起始索引,让逻辑更清晰,减少硬编码错误; - 规范
main函数写法,符合C语言标准; - 优化
printf输出格式,让结果可读性更强。
内容的提问来源于stack exchange,提问作者Near8472
相关产品推荐
相关产品推荐

