应使用归并而非排序逐行读取两文件比较后写入较小行一文件耗尽后直接复制另一文件剩余行用getline返回值判断读取状态避免eof()陷阱注意CRLF换行符导致的 残留问题。用 std::ifstream 和 std::ofstream 逐行归并不是读完再排序直接把两个文件全读进内存再 std::sort既浪费内存又破坏“有序”前提——你已经有天然的升序结构该用归并merge而不是排序sort。核心是模拟归并排序的合并步骤维护两个输入流的当前行每次取较小者写入输出文件。关键点每行用 std::getline 读取避免 operator 跳过空行或截断含空格的字段必须提前判断某文件是否已读完否则 getline 失败后仍尝试比较会出错字符串比较默认按字典序若需数值比较如文件里是数字得先 std::stoi 或用 std::lexicographical_compare 配自定义比较器处理文件末尾边界eof() 不可靠要用 getline 返回值判断while (!f1.eof()) 是经典陷阱——eof() 只在读取失败后才置位最后一行成功读入后 eof() 仍是 false循环多跑一次导致重复写或崩溃。正确做法是把 std::getline 放进 while 条件里。实操建议立即学习“C免费学习笔记深入”用 bool has_line1 std::getline(f1, line1) 获取状态成功才参与比较当一个文件耗尽时把另一个文件剩余所有行直接 std::copy 到输出别再进主循环注意空文件要能安全处理getline 对空文件返回 false不抛异常字符编码和换行符Windows 的 在 Linux 下可能被当成内容的一部分如果源文件是 Windows 编码CRLF而你的程序在 Linux/macOS 下运行std::getline 默认按 切割会导致每行末尾多出一个 影响比较结果比如 123 可能为真但语义上不该这样。 AI智研社 AI智研社是一个专注于人工智能领域的综合性平台