std :: string не завершается должным образом

Когда я отправляю std::string в выходной поток, вызвав ostream << string.c_str(); строка не заканчивается правильно. Почему это?

class Application {
public:
bool print() {
out << "Content-Type: text/html; charset=utf-8\r\n\r\n";
std::ifstream inFileStream;
inFileStream.open("./test.html");
if(!inFileStream.is_open()) {
out << "Error Opening File";
return true;
}
boost::uintmax_t templateSize = boost::filesystem::file_size("./test.html");
std::string output;
char* templateData = new char[templateSize];
char* bytePtr = templateData;
inFileStream.read(templateData, templateSize);

std::ofstream logFile;
logFile.open("/tmp/test.log");
while(*bytePtr != EOF) {
if(*bytePtr ==  '{')
readVar(&bytePtr, &output);
else
output.push_back(*bytePtr);

bytePtr++;
}
delete[] templateData;
output.push_back(0);
logFile << output.c_str();
return true;

}
private:
void readVar(char** bytePtrPtr, std::string* output) {
while(**bytePtrPtr != EOF) {
if(**bytePtrPtr == '}')
return;
output->push_back('*');
(*bytePtrPtr)++;
}
}
};

Выход этого (внутри файла журнала) включает правильно проанализированный test.html, но также некоторые дополнительные байты мусора.

0

Решение

Прочитанные данные не прекращаются EOF, Вы сбрасываете мусор из файла, который находится между концом файла и первым char который преобразуется в EOF, Вы должны остановить свой цикл добавления символов в output как только вы обработали n символы где n является результатом вызова inFileStream.read(...),

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]