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

如何在C语言中清除TXT文件读取内容中的隐藏换行符

问题原因

getline读取每行内容时,会将行尾的换行符\n(Windows系统下是\r\n)一同存入缓冲区,你只移除了逗号,换行符仍保留在最后一个参数的末尾,导致strcmp匹配失败。

解决方案

有两种常用且改造成本极低的方案可选:


方案1:读取行后直接移除尾部换行符

在getline读取成功后、处理行内容前,直接截断末尾的换行符即可,修改你的sendLine函数循环逻辑:

while ((read = getline(&line, &len, fp)) != -1) {
    // 新增逻辑:移除行尾换行/回车符
    if (read > 0 && line[read - 1] == '\n') {
        line[--read] = '\0';
    }
    if (read > 0 && line[read - 1] == '\r') {
        line[--read] = '\0';
    }

    // 原有逻辑保持不变
    printf("Retrieved line of length %zu:\n", read);
    printf("%s", line);
    remove_all_chars(line, ',');
    interpertLine(line);
    decodeLine(0);
    printf("\n");
}

该方案从源头清除换行符,后续所有处理逻辑都不需要额外适配。


方案2:修改strtok分隔符规则

你当前用strtok拆分时只把空格作为分隔符,直接将换行、回车也加入分隔符列表,strtok会自动忽略尾部的空白字符,不需要修改行处理逻辑,只需修改interpertLine函数的两处strtok参数:

void interpertLine(char currentLine[])
{
   // 分隔符新增换行、回车
   char * token = strtok(currentLine, " \n\r");
   op = token;
   int i = 0;
   while( token != NULL ) {
      token = strtok(NULL, " \n\r"); // 分隔符同样新增换行、回车
      if(i == 0)
      {
          rs = token;
      }
      else if (i == 1)
      {
          rt = token;
      }
      else if (i == 2)
      {
          rd = token;
      }
      i++;
   }
}

该方案不需要调整读取逻辑,同时还能兼容行尾存在多余空格的情况。

两种方案任选其一即可解决$t2匹配失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:54:03