针对windows的linux c++代码修改

Posted

技术标签:

【中文标题】针对windows的linux c++代码修改【英文标题】:Linux c++ code modification for windows 【发布时间】:2014-04-24 14:25:46 【问题描述】:

我主要使用 Linux 进行开发,但 Windows 是办公室的标准操作系统。于是我就为Windows环境写了一个简单的文件操作代码。

以下代码(用于打印文件行)在 Linux 中运行良好,但在 Windows 中编译时,运行可执行文件后没有输出。

#include <iostream> 
#include <fstream> 
#include <string> 
int main()

   std::ifstream stream;
   stream.open("n.txt");

   if(!stream)
   
       std::cerr << "Rrror opening file.\n";
       return 1;
   
   std::string result;
   while(std::getline(stream, result))
   
       std::cout << result << endl;
   

   return 0;

以下是我在Powershell中给出的编译命令:

g++ manip.cpp

文本文件n.txt如下:

*DLOAD
362521,P1,-0.000129208
362524,P2,-1.67058e-005
362525,P1,-0.000105441
362528,P2,-1.87842e-005
362529,P1,-0.000106145
362532,P2,-1.84522e-005
362533,P1,-0.000105311

如何使用现有编译器运行我的程序?

【问题讨论】:

如何在 Windows 中不起作用?你在 Windows 中使用什么编译器?可执行文件和您尝试读取的文件是否在 Windows 的同一目录中?您如何在 Windows 中测试您的程序? @JoachimPileborg 我试图列出上面的编译器。请建议您知道的任何其他方式来获取编译器。我是在 Windows 中编译程序的新手。是的,文件在同一目录中。我在 powershell 中使用.\a.exe 来测试可执行文件。 好的,那么程序编译和链接正常吗?并且您要读取的文件与可执行文件位于同一目录中?然后它应该工作。除了可能有一个问题(我会添加一个答案)。 在以后的问题中,请描述如何某些东西不起作用。它会给出编译器或链接器错误吗?然后将 completeunedited 错误日志添加到问题中。程序运行时会崩溃吗?然后这样说,如果可能的话,也添加一个调试器回溯。输出不是你所期望的吗?然后将预期的 实际输出添加到问题中。这将使您的问题更容易诊断,并使我们更容易为您提供帮助,而不是我们只是猜测(这是我对答案所做的)。 检查stream.open("n.txt")之后的流状态。尝试使用stream.good()stream.bad()stream.fail() 【参考方案1】:

Windows 和 Linux 文本文件有一点不同:它们的行尾。 Linux 有普通换行符 ("\n"),而 Windows 有回车 换行符 ("\r\n")。

如果您尝试在 Windows 系统上读取带有 Linux(或者 UNIX,因为它来自于)行尾的文件,则行尾将无法识别,并且将被读取为单个长行。

Linux 端有一些实用程序可以转换行尾(搜索例如dos2unixunix2dos),当今大多数现代文本编辑器(在两个系统上)也可以转换行尾。

通过对文本文件进行十六进制转储,很容易验证此问题,并查看该行是否以0x0c 0x0a 或只是0x0a 结尾。

【讨论】:

我已经创建了程序以及windows中的文本文件。

以上是关于针对windows的linux c++代码修改的主要内容,如果未能解决你的问题,请参考以下文章

将数据序列化代码从 C++ linux/mac 移植到 C++ windows

C++ Linux 代码破坏了 Windows 构建,因为缺少标头意味着函数未定义

linux上的C++代码比windows上慢得多[关闭]

将现代 C++ 从 Linux 交叉编译到 Windows

在 Windows 上运行并生成 Linux 代码的 C++ 编译器

Windows 与 Linux 上的 gSOAP C++ 代码