2015-08-28 2 views
2
char* readFromFile(char* location) 
{ 
    int total = 0; 
    ifstream ifile = ifstream(location); 
    ifile.seekg(0, ifile.end); 
    total = ifile.tellg(); 

    cout << "Total count" << total << endl; 
    char* file = new char[total+1]; 

    ifile.seekg(0, ifile.beg); 

    ifile.read(file, total+1); 

    cout <<"File output" << endl<< file << "Output end"<<endl; 

    return file; 
} 

здесь он печатает данные файла, но также добавляет некоторое количество мусора. как мне его исправить?C++ ifstream добавляет данные мусора при чтении из текстового файла

+1

Null прекратить действие вашей строки? –

ответ

5

read просто считывает несколько байтов, он не имеет нулевой последовательности. В то время как cout ожидает последовательность с нулевым завершением, поэтому она продолжает печатать случайную память, расположенную после вашего массива, до тех пор, пока она не запустится в 0. Поэтому вам нужно выделить один дополнительный символ, а затем заполнить его нулевым символом.

char* readFromFile(char* location) 
{ 
    int total = 0; 
    ifstream ifile = ifstream(location); 
    ifile.seekg(0, ifile.end); 
    total = ifile.tellg(); 

    cout << "Total count" << total << endl; 
    char* file = new char[total+1]; 

    ifile.seekg(0, ifile.beg); 

    ifile.read(file, total); //don't need the +1 here 

    file[total] = '\0'; //Add this 

    cout <<"File output" << endl<< file << "Output end"<<endl; 

    return file; 
} 
+0

Он по-прежнему заполняет строку значением -51 ascii. можете ли вы сказать, что не так? – varuog

+0

@fallenAngel, я бы начал с использования шестнадцатеричного редактора, чтобы проверить ваш файл. Убедитесь, что данные верны. Тогда, если это правильно, дважды проверьте все свои переменные и их использование. После этого я установил точку останова и пропустил ваш код и дважды проверил, что вы сделали правильные действия на каждом шагу. –

+0

Я уже проверил в шестнадцатеричном редакторе, который показывает нормально. (Обновление) Если я передаю двоичный флаг, он работает нормально. – varuog

 Смежные вопросы

  • Нет связанных вопросов^_^