Проблемы с преобразованием std :: string в массив char - PullRequest
0 голосов
/ 23 марта 2020

У меня проблемы с преобразованием std :: string в массив char в c ++. Для контекста: я хочу отправить данные через MPI, используя protobuf. Вначале я использую protobuf для сериализации плавающего объекта с помощью serializeToString (), который возвращает std :: string. Я преобразую это в массив символов, чтобы иметь возможность отправить его через MPI. Затем я dezerialize с parseFromString () (я знаю, что protobuf, возможно, не самая быстрая альтернатива). Проблема в том, что это иногда не удается, а иногда нет. Это зависит от числа с плавающей точкой, которое я пытаюсь отправить. Например, число 1.03 сериализуется, отправляется и принимается без проблем, в то время как если я отправляю 2.03, полученное сообщение равно 0.

Теперь я проследил это до шага, где я преобразовал сериализованную строку std :: string в символ arrray. Печать std :: string после сериализации с плавающей точкой 2.01 дает "" @ ". Печать этого после преобразования этого в массив символов (используя функцию .c_str ()) дает выходной сигнал "ף". По какой-то причине "@" исчезает, и я не могу понять, почему.

Если я сам создаю строку "ף @", преобразование работает просто отлично. Поэтому следующий код

protobuf.set_float(2.01);
std::string serialized_message;
protobuf.SerializeToString(&serialized_message);
std::cout << "std::string: " << serialized_message << std::endl;
std::cout << "char: " << serialized_message.c_str() << std::endl;

дает вывод:
std :: string: "ף @"
char: "ף"

, а следующий код

std::string a = "ף@";
std::cout << "std::string: " << a << std::endl;
std::cout << "char: " << a.c_str() << std::endl;

дает вывод:
std :: string: "ף @"
char: "ף @"

Может кто-нибудь объяснить, почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...