针对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
来测试可执行文件。
好的,那么程序编译和链接正常吗?并且您要读取的文件与可执行文件位于同一目录中?然后它应该工作。除了可能有一个问题(我会添加一个答案)。
在以后的问题中,请描述如何某些东西不起作用。它会给出编译器或链接器错误吗?然后将 complete 和 unedited 错误日志添加到问题中。程序运行时会崩溃吗?然后这样说,如果可能的话,也添加一个调试器回溯。输出不是你所期望的吗?然后将预期的 和 实际输出添加到问题中。这将使您的问题更容易诊断,并使我们更容易为您提供帮助,而不是我们只是猜测(这是我对答案所做的)。
检查stream.open("n.txt")
之后的流状态。尝试使用stream.good()
或stream.bad()
或stream.fail()
。
【参考方案1】:
Windows 和 Linux 文本文件有一点不同:它们的行尾。 Linux 有普通换行符 ("\n"
),而 Windows 有回车 和 换行符 ("\r\n"
)。
如果您尝试在 Windows 系统上读取带有 Linux(或者 UNIX,因为它来自于)行尾的文件,则行尾将无法识别,并且将被读取为单个长行。
Linux 端有一些实用程序可以转换行尾(搜索例如dos2unix
和unix2dos
),当今大多数现代文本编辑器(在两个系统上)也可以转换行尾。
通过对文本文件进行十六进制转储,很容易验证此问题,并查看该行是否以0x0c 0x0a
或只是0x0a
结尾。
【讨论】:
我已经创建了程序以及windows中的文本文件。以上是关于针对windows的linux c++代码修改的主要内容,如果未能解决你的问题,请参考以下文章
将数据序列化代码从 C++ linux/mac 移植到 C++ windows
C++ Linux 代码破坏了 Windows 构建,因为缺少标头意味着函数未定义