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

如何用C语言将文本文件每行截断至$字符后复制到新文件

问题修正方案

第一个代码的问题与修复

你第一段代码的问题是把$替换成了'\n',这只是在$位置插入换行,原$后的内容仍存于字符串中,导致被输出到新行。正确做法是将$替换为字符串结束符'\0'来截断内容,同时补回换行符保证每行格式正确:

while (fgets(line, LINE_LENGTH, input) != NULL)
{
    strcpy(tmp_line, line);
    char *cmt_ptr = strchr(tmp_line, '$');
    if (cmt_ptr != NULL)
    {
        *cmt_ptr = '\0'; // 截断字符串,丢弃$及之后的所有内容
        strcat(tmp_line, "\n"); // 补回换行符,确保输出行的格式统一
    }
    fputs(tmp_line, output);
}

如果原行的换行符在$之前,strcat不会产生多余内容;如果是文件最后一行无换行,补换行也符合文本文件的规范。

第二个代码的问题原因

你用strtok的代码触发访问违规,大概率是tmp_line未正确分配可写内存(比如是未初始化的指针、内存空间不足,或是指向只读内存区域)。而且strtok本就不是处理这个需求的合适工具——它用于分割多段字符串,这里用strchr直接截断的方案更高效安全。

额外注意事项

  • 确保line和tmp_line都分配了至少LINE_LENGTH字节的内存,避免缓冲区溢出。
  • 打开文件时要检查input和output指针是否为NULL,处理文件打开失败的异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:01:43