C++ C++;使用*i指针打开文件,在Linux中覆盖,但在Windows中不覆盖
所以我让这个程序在Windows下运行,我正试图让它也在Linux机器上运行。我相信Linux机器运行的是过时的g++编译器版本,但这超出了我的控制范围。无论如何,我的功能如下:C++ C++;使用*i指针打开文件,在Linux中覆盖,但在Windows中不覆盖,c++,linux,pointers,call,C++,Linux,Pointers,Call,所以我让这个程序在Windows下运行,我正试图让它也在Linux机器上运行。我相信Linux机器运行的是过时的g++编译器版本,但这超出了我的控制范围。无论如何,我的功能如下: for (vector<string>::iterator i = groups.begin(); i != groups.end(); ++i) { inStream.open((*i + "List.txt").c_str()); while (getline(inStream, nex
for (vector<string>::iterator i = groups.begin(); i != groups.end(); ++i)
{
inStream.open((*i + "List.txt").c_str());
while (getline(inStream, next))
{
if (next == n) {
memberOf.push_back(*i);
}
}
inStream.close();
}
在Linux中似乎什么都不起作用,但是我尝试过的每件事在windows中都有相同的(正确的)最终结果
我做错了什么
编辑:inStream是一个ifStream对象。
memberOf是字符串的另一个向量。听起来像是从包含Windows行结尾的文件中读取
Tigers
。如果在Linux中读取此文件,则读取以下行:
Tigers\r\n
将导致内存中的字符串为Tigers\r
。然后,当您连接到它时,即使结果实际上是Tigers\rList.txt
,当您打印出来时,您的终端将\r
视为回车,因此List.txt
覆盖屏幕上的Tigers
当然,打开文件失败,因为文件名不包含嵌入的\r
要解决此问题,可以执行以下操作之一:
- 在Linux中,确保要打开的文件具有Linux行结尾(例如,在其上运行
)dos2unix
- 更新程序以查找并丢弃从文件中读取的行末尾的
\r
Tigers\r\n