Linux (WSL) Windows 子系统中的 C++ 字符串连接正在删除第一个字符串
C++ string concatenation in the Windows Subsystem for Linux (WSL) is deleting first string
我需要帮助来理解我的代码或系统有什么问题。出于某种原因,在 WSL(Windows Subsystem for Linux)中编译和 运行 时,以下代码会生成错误的结果。当 运行 直接在 windows 命令终端中时,它会正确生成最终输出为 HNDPNV,而在 WSL 中生成 PNV。 airports 文件只是一系列 50 行,每行 3 个字母。 ubuntu 18.04 WSL 中的 g++ 版本为 7.5.0,g++ windows 版本为 9.2.0.
编译标志是:g++ -std=c++17 -Wall -Wextra -o test test.cpp
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
using namespace std;
int main() {
string airport_designations[50];
string air_companies_designations[20];
ifstream airports;
ifstream aircompanies;
string name = "apple";
string name2 = "orange";
airports.open("Airports.txt");
for (int i = 0; i < 50; i++){
getline(airports, airport_designations[i]);
cout << airport_designations[i] << endl;
}
airports.close();
aircompanies.open("Companies.txt");
for (int i = 0; i < 20; i++){
getline(aircompanies, air_companies_designations[i]);
cout << air_companies_designations[i] << endl;
}
aircompanies.close();
name = airport_designations[4];
cout << name << endl;
name += airport_designations[8];
cout << name << endl;
}
windows 上的换行符是 \r\n,
在 Linux\n。
为了得到一致的结论,需要将Airports.txt文件中的所有\r\n替换为\n.
我需要帮助来理解我的代码或系统有什么问题。出于某种原因,在 WSL(Windows Subsystem for Linux)中编译和 运行 时,以下代码会生成错误的结果。当 运行 直接在 windows 命令终端中时,它会正确生成最终输出为 HNDPNV,而在 WSL 中生成 PNV。 airports 文件只是一系列 50 行,每行 3 个字母。 ubuntu 18.04 WSL 中的 g++ 版本为 7.5.0,g++ windows 版本为 9.2.0.
编译标志是:g++ -std=c++17 -Wall -Wextra -o test test.cpp
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
using namespace std;
int main() {
string airport_designations[50];
string air_companies_designations[20];
ifstream airports;
ifstream aircompanies;
string name = "apple";
string name2 = "orange";
airports.open("Airports.txt");
for (int i = 0; i < 50; i++){
getline(airports, airport_designations[i]);
cout << airport_designations[i] << endl;
}
airports.close();
aircompanies.open("Companies.txt");
for (int i = 0; i < 20; i++){
getline(aircompanies, air_companies_designations[i]);
cout << air_companies_designations[i] << endl;
}
aircompanies.close();
name = airport_designations[4];
cout << name << endl;
name += airport_designations[8];
cout << name << endl;
}
windows 上的换行符是 \r\n, 在 Linux\n。 为了得到一致的结论,需要将Airports.txt文件中的所有\r\n替换为\n.