ostringstreamで扱ったtxtファイルの文字化け
注:CompanyはFileクラスから継承。set_written_elementでwriteに文字列を渡し、表示させる。
macでは問題ないが、windows10のwslではtxtファイルが文字化けを起こします。
いったい何が悪いのでしょうか?
gccのバージョンはgcc (Ubuntu 5.4.0-6ubuntu1~16.04.6) 5.4.0 20160609でした。
txtファイルをvimで見ると illegal byte in line
となっており、文字コードをもとのutf-8からshift-jis, euc-jpに直しても変わらなかったため、質問させていただきました。
int main(){
Company company_test;
char path[]="company_test.txt";
company_test.input_path(path);
company_test.show();
company_test.write(company_test.set_written_element());
cout << company_test.set_written_element() << endl; //winだとset_written_elementがおかしい
company_test.show();
return 0;
}
void File::write(const char* text){
int line_number;
line_number=Line_Count(output_path());
ofstream fd(output_path(),ios::app);
fd << line_number << " " << text << "\n";
fd.close();
}
const char* Company::set_written_element(){
const char* written_element;
string buffer;
string tmp;
ostringstream ret_char;
int i;
for(i=0; i<=2;i++){
switch(i){
case 0:
cout << "勤務先を入力してください。" << endl;
cin >> buffer;
ret_char << setw(25) << left << buffer;
buffer.clear();
break;
case 1:
cout << "時給を入力してください。" << endl;
cin >> buffer;
ret_char << setw(10) << left << buffer;
buffer.clear();
break;
case 2:
cout << "備考を入力してください。" << endl;
cin >> buffer;
ret_char << setw(50) << left << buffer;
buffer.clear();
break;
}
}
tmp = ret_char.str();
written_element = tmp.c_str();
return written_element;
}