У меня есть библиотека, которая экспортирует char*
, в которой я могу сгенерировать сообщение и затем вызвать send для отправки сообщения (по сети).Как я могу написать очень простое сообщение в экспортируемый буфер в коде?
Я написал четыре различных метода для написания сообщения, ни один из которых не является идеальным:
class Lib {
char msg[100];
public:
Lib() {
// nullify the buffer
msg[0] = 0;
}
char* get_buffer() {
return msg;
}
void send() {
std::cout << "Message is: " << msg << std::endl;
// nullify the buffer for the next send
msg[0] = 0;
}
};
int main () {
{
Lib lib;
char* buf = lib.get_buffer();
// Method 1 is tedious
buf[0] = 'H';
buf[1] = 'e';
buf[2] = 'l';
buf[3] = 'l';
buf[4] = 'o';
buf[5] = 0;
lib.send();
}
{
Lib lib;
char* buf = lib.get_buffer();
// Method 2 doesn't work
buf = "Hello";
lib.send();
}
{
Lib lib;
char* buf = lib.get_buffer();
// Method 3 involves a copy
string str = "Hello";
str.copy(buf, str.size());
lib.send();
}
{
Lib lib;
char* buf = lib.get_buffer();
// Method 4 involves a copy
char* c_arr = "Hello";
std::memcpy(buf, c_arr, 6);
lib.send();
}
}
Вывод:
Message is: Hello
Message is:
Message is: Hello
Message is: Hello
Первый метод мне кажется утомительным.Второй метод не работает, потому что buf
указывает на новое место в памяти, которое содержит «Hello».Третий и четвертый методы включают создание временного буфера памяти и копии памяти.
Я хотел бы что-то похожее на buf = {'H', 'e', 'l', 'l','o'};
, но это работает только во время построения.
Не говоря уже о том, чтоУ меня есть одно предупреждение компиляции в методе 2 и методе 4 с g++-7.3
:
warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]