Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用*i指针打开文件,在Linux中覆盖,但在Windows中不覆盖_C++_Linux_Pointers_Call - Fatal编程技术网

C++ C++;使用*i指针打开文件,在Linux中覆盖,但在Windows中不覆盖

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

所以我让这个程序在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, 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

谢谢!你说得对,我是从一个从windows复制的.txt文件中读取的。我使用Linux重新创建文件,现在它与您的问题完全相关,但不是使用<迭代器> < /COD>循环的杂乱<代码>,在C++ 11中,尝试一个基于范围的<代码> < <代码> >循环:<代码>(String s:GROUP){INSROUN.OPEN((S+)列表.txt)“.cxString());…<代码>(可能您过时的编译器无法识别此构造..)
Tigers\r\n