如何用C语言删除文本文件最后一行,附错误代码与需求示例
问题排查
你原有代码存在以下核心错误:
- 变量名不匹配:定义文件指针为
fptr1,后续实际使用的是未声明的filet变量 - 未初始化变量:
del变量没有赋值就直接参与比较,会触发未定义行为 - 读写逻辑错误:
r+模式下读写共用文件指针,边读边写会直接覆盖原内容,指针位移也会紊乱 - 缺少文件打开失败的异常处理
可运行实现代码
实现逻辑为:先读取所有IP行到内存,删除最后一行重复的127.0.0.1后再整体写回文件,对新手更友好也更容易调试:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINES 100 // 支持最多100行IP,可按需调整 #define IP_LEN 20 // 单个IP字符串最大长度 int main() { char file_path[] = "test.txt"; char ips[MAX_LINES][IP_LEN]; int line_count = 0; FILE *fp; // 第一步:读取所有行到内存 fp = fopen(file_path, "r"); if (fp == NULL) { perror("打开文件失败"); return 1; } while (fgets(ips[line_count], IP_LEN, fp) != NULL && line_count < MAX_LINES) { // 去掉fgets读取的末尾换行符 size_t len = strlen(ips[line_count]); if (len > 0 && ips[line_count][len-1] == '\n') { ips[line_count][len-1] = '\0'; } line_count++; } fclose(fp); // 第二步:删除最后一行重复的127.0.0.1 if (line_count >= 2 && strcmp(ips[line_count-1], "127.0.0.1") == 0 && strcmp(ips[line_count-2], "127.0.0.1") == 0) { line_count--; } // 第三步:把处理后的内容写回文件 fp = fopen(file_path, "w"); if (fp == NULL) { perror("写入文件失败"); return 1; } for (int i = 0; i < line_count; i++) { fprintf(fp, "%s\n", ips[i]); } fclose(fp); printf("处理完成,共删除1行重复IP\n"); return 0; }
运行说明
- 确保
test.txt和编译后的程序在同一目录下 - 编译命令:
gcc 你的源文件名.c -o ip_dedup - 直接运行生成的
ip_dedup可执行文件即可 - 处理后文件会保留1行
127.0.0.1,删除末尾重复的1行,完全符合你要求的最终效果
内容的提问来源于stack exchange,提问作者Halano Siblee
相关产品推荐
相关产品推荐

