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

读取文件特定字符串时程序执行中断,请求技术协助

排查链表读取TXT文件时的程序崩溃问题

看起来你遇到的是典型的文件读取边界处理+内存管理问题,这种情况我之前调试代码时也碰过好几次,大概率是你的代码在处理文件末尾、超长字符串时出现了内存溢出或者逻辑判断错误,导致链表结构被破坏,进而引发程序中断。下面我给你拆解可能的原因和具体的修复步骤:

可能的问题根源

1. 文件末尾的换行符/空内容处理不当

很多文本编辑器会在文件最后一行自动添加换行符,或者你手动添加的最后一行可能存在隐藏的空白字符(比如空格、制表符)。如果你的读取逻辑没有处理这些情况:

  • 比如用fgets()读取时,最后一行刚好填满缓冲区且没有换行符,会导致fgets()无法正确标记EOF,下次读取会拿到无效内容;
  • 或者把空行当成有效姓名存入链表,后续操作时访问空指针引发崩溃。

2. 链表节点的字符串内存分配不足

如果你的代码用固定大小的字符数组存储姓名(比如char name[20];),当遇到像jlajfi3jrp...这类超长字符串时,会触发缓冲区溢出,破坏链表的指针结构(比如覆盖了next指针的内存),直接导致程序崩溃。

3. EOF判断逻辑错误

不少开发者会误用feof()作为循环终止条件,但feof()只有在读取操作尝试越过文件末尾后才会返回真——这意味着你可能已经读取到无效内容,却仍然创建了链表节点,进而引发错误。

具体修复步骤

步骤1:修正文件读取逻辑

用读取函数的返回值判断是否结束,同时处理换行符和空行:

char buffer[256];
FILE* fp = fopen("names.txt", "r");
if (!fp) {
    perror("Failed to open file");
    exit(EXIT_FAILURE);
}

// 正确的循环:用fgets的返回值判断是否读取到有效内容
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
    // 去掉换行符(包括Windows的\r\n)
    buffer[strcspn(buffer, "\n\r")] = '\0';
    // 跳过空行(比如文件末尾的空白行)
    if (strlen(buffer) == 0) continue;
    // 添加到链表
    add_to_linked_list(buffer);
}
fclose(fp);

步骤2:动态分配链表节点的字符串内存

不要用固定大小数组,根据读取到的字符串长度动态分配内存,确保足够容纳内容+终止符\0:

typedef struct Node {
    char* name;
    struct Node* next;
} Node;

Node* create_node(const char* name) {
    Node* new_node = malloc(sizeof(Node));
    if (!new_node) {
        perror("malloc failed for node");
        exit(EXIT_FAILURE);
    }
    // 分配字符串内存:长度+1(存储'\0')
    new_node->name = malloc(strlen(name) + 1);
    if (!new_node->name) {
        perror("malloc failed for name");
        free(new_node);
        exit(EXIT_FAILURE);
    }
    strcpy(new_node->name, name);
    new_node->next = NULL;
    return new_node;
}

步骤3:调试时打印中间信息

在读取每一行后,打印内容和长度,快速定位异常行:

printf("Read line: '%s', length: %zu\n", buffer, strlen(buffer));

步骤4:用调试器查看崩溃点

如果你的开发环境支持GDB或VS调试器,运行程序时附加调试器,当程序崩溃时查看调用栈,就能精准看到是在链表添加、字符串拷贝还是其他步骤出的问题。

总结

这种问题本质是边界情况没覆盖+内存管理不严谨,只要把文件末尾的空行、超长字符串处理好,同时确保链表节点的内存分配正确,应该就能解决程序中断的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:26:40