与Windows相比,将数组写入文件的相同代码在Linux上少写1行
Same code to write an array to a file writes 1 line less on Linux compared to Windows
编辑:问题解决了。 @sth问我是否忘记删除我可能用"new"创建的对象。他是对的!我忘了。修复它确实解决了问题。我想这是Visual Studio为我做的事情,而Linux不是。
编辑2:由于这是一个学校项目和潜在的抄袭问题,即使我自己编写了代码,代码也被删除了。此外,该问题似乎与我的代码细节无关,而更多的是新建和删除的一般c ++用例。
完全相同的代码在Visual Studio 2013(安装在Windows上(和我学校的ssh服务器上的行为不同,我在其中使用g ++编译代码。代码编译时没有错误,除 1 部分外,仍按预期工作。将数组的内容逐行写入文件时,它少写 1 行。
如果数组有 10 个元素,Visual Studio 编译的代码将创建包含 10 行的"sorted.txt"文件,并且所有元素都恰好包含 1 个整数。没有空行。Ssh 编译的代码仍然创建 10 行,但最后一行为空。所以我的"sorted.txt"文件中实际上缺少 1 个整数。评分时,我的作业将在此服务器上编译,因此这可能是一个问题。
您的代码包含避免在最后一行末尾编写换行符的逻辑。这很愚蠢,感觉有点被解释。您需要换行符。
>std::ofstream
是一个缓冲流。如果未正确关闭或刷新,则某些缓冲数据可能不会写入磁盘。
在您的情况下,每当包含FileManager
被销毁时,都会清理std::ofstream
。所以这很可能不会发生。可能是FileManager
是用new
动态分配的,永远不会被delete
破坏,或者程序被异常终止,例如使用 C 库函数 exit()
。
只有最后一行受此问题影响,因为std::endl
刷新流并强制将以前的数据写入磁盘。
当我第一次看到你的代码时,我觉得你根据流的布尔运算符关闭流很奇怪。您可以在此处阅读有关布尔运算符的作用。而且,如此处所述,即使流仍处于打开状态,bool 运算符也可以返回 false。请考虑根据以下条件关闭流:
if (output.is_open ())
而不是
if (output)
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何在linux终端中同时编译和运行c++代码
- 在Linux for Windows上编译C++代码时出错
- 找不到Linux Visual Studio代码C++文件
- 是否可以在Linux上使用.Net Core 3.1创建C++/CLI代码的C#DLL
- 在 Linux 群集上运行 Windows C++代码
- [longjmp/setjmp]c++ 相同的代码窗口有异常 Linux 没有错误并且运行良好
- 在 Azure DevOps 构建管道中使用英特尔C++编译器为 Linux 环境构建C++代码
- g++ 9.2.1 (Linux) 会导致 seg 错误,但 Windows 上的代码块不会
- 我在使用 boost::serialization 时遇到了一个问题,我的代码在 Linux 中运行良好,但在 Wind
- 使用 execv 从C++代码执行的 Linux 脚本失败
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- linux mint进程上的代码块已终止,状态为-1
- 在 RedHat Linux Enterprise Developer Workstation 上编译 C++17 代码
- 如何在 Linux 中获取本地代码页?
- popen() 如何工作以及如何在 Linux 上实现它到 C++ 代码中
- C++代码在 Linux 上按预期工作,但在 Windows 上则不然
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- C/C++,如何在CLI中为下载进度编写代码?Linux
- 使用哪个命令在C++代码 [Linux] 中执行程序