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

C语言文件操作:如何在不影响其他数据的情况下追加到指定行尾写入

C语言中在文件行尾插入内容的问题

没有无需复制即可直接在行尾插入的方法,核心原因如下:

  • 文件在系统中是以字节流形式存储的,不存在“行”这种物理划分,行只是文本层面的逻辑概念。第一行结尾的字节之后,紧接着就是第二行的起始字节。
  • 即便用fseek定位到第一行结尾,直接写入新数据会覆盖后续字节(也就是第二行的内容),无法实现插入效果。

可行的处理方式

要实现需求,必须先保存第二行及之后的内容,再写入新数据,最后恢复原有内容,以下是具体实现示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    FILE *fp = fopen("test.txt", "r+");
    if (!fp) {
        perror("fopen failed");
        return 1;
    }

    // 定位到第一行结尾
    char line_buf[1024];
    if (!fgets(line_buf, sizeof(line_buf), fp)) {
        perror("读取第一行失败");
        fclose(fp);
        return 1;
    }
    long first_line_end_pos = ftell(fp);

    // 读取第二行及后续内容到内存
    fseek(fp, 0, SEEK_END);
    long total_size = ftell(fp);
    long second_part_len = total_size - first_line_end_pos;
    char *second_part = malloc(second_part_len + 1);
    if (!second_part) {
        perror("内存分配失败");
        fclose(fp);
        return 1;
    }
    fseek(fp, first_line_end_pos, SEEK_SET);
    fread(second_part, 1, second_part_len, fp);
    second_part[second_part_len] = '\0';

    // 写入新数据到第一行结尾
    fseek(fp, first_line_end_pos, SEEK_SET);
    fputs("abc,", fp);

    // 恢复第二行内容
    fputs(second_part, fp);

    // 资源清理
    free(second_part);
    fclose(fp);
    return 0;
}

如果文件体积较小,也可以直接将整个文件读入内存,修改第一行后重新写入整个文件,逻辑会更简单。

内容的提问来源于stack exchange,提问作者Leaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:47:16