C语言从文件读取二维字符数组时程序停滞的问题求助
问题分析与解决建议
核心问题1:fscanf参数传递错误
fscanf的%c格式符要求传入指向char的指针,但你直接传递了board[r][c](char类型的数值),这会触发未定义行为,是程序停滞的直接原因。
修复代码:
fscanf(fp1, "%c ", &board[r][c]); // 添加取地址符&,传递char变量的地址
核心问题2:二维数组内存分配错误
main中分配行内存时,错误使用了sizeof(char *),但每行需要存储n个char类型元素,正确的分配逻辑应该是:
char **board = (char **)malloc(n * sizeof(char *)); for (int i = 0; i < n; i++) board[i] = (char *)malloc(n * sizeof(char)); // 将sizeof(char*)改为sizeof(char)
注:sizeof(char)在C标准中固定为1,也可以直接写n * 1,但用sizeof(char)更符合代码规范。
其他问题与优化点
完善错误处理:当前
fopen失败后仅打印提示却继续执行,会导致后续空指针操作,应在报错后直接退出函数:if (fp == NULL) { printf("Could not create file"); return; // 终止函数,避免非法操作 }同理处理
fp1的空指针判断。优化打印格式:打印数组时建议每行结束添加换行,和文件存储格式保持一致,便于查看:
for(int r = 0; r < n; r++) { for(int c = 0; c < n; c++) { printf("%c ", board[r][c]); } printf("\n"); // 每行结束换行 }
内容的提问来源于stack exchange,提问作者ds778104
相关产品推荐
相关产品推荐

