如何用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
相关产品推荐
相关产品推荐

