Ваш вопрос не содержит много сведений о сетевом протоколе, см. Ответ от @DavidSchwartz.
Но сосредоточившись на буфере, в котором вы его храните: если вы попытаетесь записать больше чем 4K символов в память, выделенную message
, ваша программа может потерпеть крах.
Если тест на размер сообщения, которое получено, вы могли бы сделать realloc
:
int buf_len = 4000;
char *message;
message = static_cast<char*>(malloc(buf_len));
/* read message, and after you have read 4000 chars, do */
buf_len *= 2;
message = static_cast<char*>(realloc(message, buf_len));
/* rinse and repeat if buffer is still too small */
free(message); // don't forget to clean-up
Но это очень трудоемкий. Просто используйте a std::string
int buf_len = 4000;
std::string message;
message.reserve(buf_len); // allocate 4K to save on repeated allocations
/* read message, std::string will automatically expand, no worries! */
// destructor will automatically clean-up!
Могу ли я спросить, почему вы используете 'malloc' в C++? Кроме того, 'sizeof (char)' указывается всегда как '1'. –
что у меня есть альтернативный вариант, я должен использовать его как char * message = new char [4000]; – user3559050
Да, именно это. –