Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++ 在Windows10和Ubuntu文件夹中写入文件_C++_Ubuntu_Fstream - Fatal编程技术网

C++ 在Windows10和Ubuntu文件夹中写入文件

C++ 在Windows10和Ubuntu文件夹中写入文件,c++,ubuntu,fstream,C++,Ubuntu,Fstream,因此,下面的代码在Windows10上的Visual Studio 2017中非常有效,但在我的Ubuntu虚拟机上没有代码块。该程序应该逐行从.txt文件中获取用户名,然后在单独的文件夹中创建.txts,其中的名称是由两个不同的用户名组合而成的 这可能是什么原因?除了添加要删除的代码之外,还有什么方法可以解决这个问题吗 示例usernames.txt 用户11 用户22 用户33 预期结果:user11user22.txt、user11user33.txt、user22user33.txt i

因此,下面的代码在Windows10上的Visual Studio 2017中非常有效,但在我的Ubuntu虚拟机上没有代码块。该程序应该逐行从.txt文件中获取用户名,然后在单独的文件夹中创建.txts,其中的名称是由两个不同的用户名组合而成的

这可能是什么原因?除了添加要删除的代码之外,还有什么方法可以解决这个问题吗

示例usernames.txt

用户11

用户22

用户33

预期结果:user11user22.txt、user11user33.txt、user22user33.txt

ifstream fin("usernames.txt");
string user1;

while (getline(fin, user1))
    allUsers.push_back(user1);

for (int i = 0; i < allUsers.size(); i++)
{
    char fileArgument[60];
    strcpy(fileArgument, "PRIVATEHISTORY/");
    strcat(fileArgument, allUsers[i].c_str());
    for (int j = i+1; j < allUsers.size(); j++)
    {
        char temp[60];
        strcpy(temp, fileArgument); 
        strcat(temp, allUsers[j].c_str());
        strcat(temp, ".txt");

        cout << temp << '\n';

        FILE* x = fopen(temp, "w");
        fclose(x);
    }
    cout << '\n';
}
Ubuntu结果:user11.txt、user11user22.txt、user11user33.txt、user22.txt、user22user33.txt、user33.txt

ifstream fin("usernames.txt");
string user1;

while (getline(fin, user1))
    allUsers.push_back(user1);

for (int i = 0; i < allUsers.size(); i++)
{
    char fileArgument[60];
    strcpy(fileArgument, "PRIVATEHISTORY/");
    strcat(fileArgument, allUsers[i].c_str());
    for (int j = i+1; j < allUsers.size(); j++)
    {
        char temp[60];
        strcpy(temp, fileArgument); 
        strcat(temp, allUsers[j].c_str());
        strcat(temp, ".txt");

        cout << temp << '\n';

        FILE* x = fopen(temp, "w");
        fclose(x);
    }
    cout << '\n';
}
在Windows10/VS2017上查看结果

Ubuntu/Codeblocks上的cout结果


可能是usernames.txt中的额外\n-s导致了

你试过调试你的代码吗?即使是一系列的打印行也可能会告诉你哪里出了问题。我会忘记c字串和strcat。。。只需使用std::string即可。您可能需要在allUsers.push_backuser1之前打印该行;要查看显示的内容,您应该使用所有警告和调试信息编译代码:g++-Wall-Wextra-g。你应该。您需要阅读有关Linux编程的更多信息,请参阅和。Linux和Windows是不同的操作系统。你的“修复我的代码”问题没有一个是离题的,所以