C语言读取文件指定行存入数组失败,求代码错误排查
你的代码存在这些问题,逐一修正即可:
fgets循环条件错误:
fgets读取失败或到文件末尾时返回的是NULL(空指针),不是'\0'(字符串结束符),所以循环条件应该写成:while(fgets(line, 200, file) != NULL)目标行判断逻辑错误:
line[0] == 1是在判断行首字符的ASCII值为1(对应控制字符SOH),这几乎不是你想要的逻辑。如果是要找行首为字符'1'的行,应该写成line[0] == '1';如果是要找第一行,需要额外加计数器变量跟踪行号,比如:int line_num = 0; while(fgets(line, 200, file) != NULL) { line_num++; if(line_num == 1) { // 处理第一行 } }找到目标行后错误调用fgets:当你找到符合条件的行时,
line里已经存了当前行的内容,但你又调用了一次fgets,这会读取下一行覆盖line,导致打印的是下一行而非目标行。直接打印line即可:if(/* 正确的判断条件 */) { printf("%s", line); }未实现目标行存入数组的需求:你的代码仅打印行,没有将目标行存储到数组里。可以定义二维数组保存找到的行,比如:
char target_lines[10][200]; // 最多存10行,每行200字符 int count = 0; // 循环内找到目标行时: if(/* 判断条件 */) { strcpy(target_lines[count], line); count++; // 加判断防止数组越界 if(count >= 10) break; }
修正后的完整示例代码
假设你要找行首为'1'的行并存入数组:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *file = fopen("line.txt", "r"); if(file == NULL) { printf("FILE OPEN ERROR"); return 1; } char line[200]; char target_lines[10][200]; // 存储目标行的数组 int count = 0; while(fgets(line, 200, file) != NULL) { // 判断行首是否为字符'1' if(line[0] == '1') { strcpy(target_lines[count], line); printf("已存储目标行:%s", target_lines[count]); count++; if(count >= 10) { // 防止数组越界 printf("数组已满,停止存储"); break; } } } fclose(file); // 后续可使用target_lines数组里的内容 printf("\n已存储%d条目标行\n", count); for(int i=0; i<count; i++){ printf("第%d条:%s", i+1, target_lines[i]); } return 0; }
内容的提问来源于stack exchange,提问作者RichpooR
相关产品推荐
相关产品推荐

