вывод не то, что я напечатал. Это -> (畳 慨 汩 朠 灵 慴 찀쳌 쳌쳌) - PullRequest
0 голосов
/ 30 июня 2011
#include <iostream>
#include <string> 
#include <fstream>
using namespace std;
int main() {
char x[20];
cout << "enter something\n";
cin.getline(x,20);
ofstream o("d:/tester.txt");
//o.write( (char*)&x , sizeof(x) );
for(int i = 0 ; i<=19 ; i++ ) {
 o.put(x[i]);
}
}

Я не получаю тот вывод в файле, который я ввожу во время программы.напримервывод 畳慨汩朠灵慴찀쳌쳌쳌 при записи suhail gupta .

В чем проблема с кодом? Даже при использовании o.write( (char*)&x , sizeof(x) ); (закомментированное утверждение) я получаю тот же вывод.

В чем причина?

1 Ответ

3 голосов
/ 30 июня 2011

Ваша программа использует неопределенное поведение.Массив x не полностью инициализирован, и вы читаете из неинициализированных индексов.Кроме того, вы всегда пишете 20 байтов, независимо от того, что вы читаете от пользователя.

Полагаю, вы используете какой-нибудь текстовый редактор, например Блокнот.Последний имеет ошибки при попытке угадать кодировку.Похоже, что он предполагает, что файл имеет формат UTF16 и отображает 20/2 == 10 символов.

Чтобы решить проблему, сохраните в файле точное количество символов, введенных пользователем.Используйте std::string, чтобы сделать это проще.

Редактировать: C ++ путь:

#include <iostream>
#include <string> 
#include <fstream>
using namespace std;
int main() {
    string x;
    cout << "enter something\n";
    getline(cin, x);
    ofstream o("d:/tester.txt");
    o << x;
}
...