You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:09:01