Почему это просто сделать пустой выходной файл

У меня есть этот код, который пытается записать строки, которые я получаю из канала (fd_3) в выходной файл. Автор печатает строки, которые получены; и затем все строки печатаются правильно, но каждый раз выходной файл пуст. Есть идеи?

close(fd_3[WRITE_END]); //wont be writing to Munch2

ofstream outFile;
outFile.open("output.txt");
if(!outFile) {
printf("File output.txt could not be opened");
}

while(read(fd_3[READ_END], (void*)line.c_str(), BUFFER_SIZE)) {
printf("writer receives: %s\n", line.c_str());
outFile << line;
}

outFile.close();

close(fd_3[READ_END]); //done reading

0

Решение

Вероятно, из-за этого ужасного

while(read(fd_3[READ_END], (void*)line.c_str(), BUFFER_SIZE)) {

Модификация c_str () недопустима, и существует очень высокая вероятность того, что это не только повредит память, но и НЕ отразится на содержимом строки.

4

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

проблема может лежать здесь:

while(read(fd_3[READ_END], (void*)line.c_str(), BUFFER_SIZE)) {

c_str здесь говорит:

std::string::c_str<string>const char* c_str ( ) const;

Получить строковый эквивалент C
Создает последовательность символов с нулевым символом в конце (c-string) с тем же содержимым, что и строковый объект, и возвращает его в качестве указателя на массив символов.

поэтому он возвращает const char *, что означает
указатель на символы, которые вы не можете изменить (вы можете изменить указатель, поэтому malloc в порядке, но вы НЕ МОЖЕТЕ изменить символы, на которые указывает, поэтому strcpy плох).

0

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