Я пишу службу загрузки файлов с использованием удаленного вызова процедуры (gRP C) в C ++. Клиент разбивает файл на порции и отправляет порции через поток gRP C. Сервер считывает поток gRP C и записывает в файл. При чтении потока gRP C происходит переполнение кучи. Я решил это с помощью strcpy, но использование strcpy загрязняет мой файл. Как решить проблему переполнения кучи
Протообъект
message FileContent {
bytes content = 1;
int32 counter = 2;
}
Client Writer
char buffer[4096];
while(file_offset < filelength)
{
memset(buffer,0,4096);
bytes_read = pread(filedes, buffer, 4096,file_offset);
filecontent.set_content(std::string(buffer, bytes_read));
filecontent.set_counter(bytes_read);
writer->Write(filecontent);
file_offset+=bytes_read;
}
Server Reader
char buffer[4096];
while (reader->Read(&filecontent))
{
bytes_read=filecontent.counter();
cout << "Bytes Read" << bytes_read << endl;
strcpy(buffer,filecontent.mutable_content()->c_str()); // if I don't do this, I get heap based overflow when the next line executes. But this corrupts my file. How do I fix it?
write(filedes, buffer,(bytes_read));
file_offset+=bytes_read;
}
Я читаю данные файла из непрерывного потока. Файл разбивается на куски и отправляется в потоке gRP C. Каждый блок требует условия на стороне сервера с помощью операции strcpy для предотвращения переполнения на основе кучи, но если я это сделаю, я повреждаю байты файла. Как мне прочитать из потока и записать в файл без добавления нулевого терминатора. ПОЖАЛУЙСТА, ПОМОГИТЕ !!!