binary_file.write(reinterpret_cast<const char*>(&p_Data),sizeof(std::string));
Правильно, поэтому во многих сценариях reinterpret_cast
плохое: оно продвигает кодирование предположений .
Это когда вы отбрасываете свои справочные материалы и просто предполагаетечто вам нужно передать указатель на std::string
где-нибудь, и решил, что сообщения об ошибках компилятора были неправильными.Итак, вы использовали reinterpret_cast
, чтобы «заткнуть его», и теперь вы удивляетесь, почему ничего не работает должным образом.
Предположительно, кто-то сказал вам «использовать std::string
» вместо массивов символов, и выЯ только что поменял имена типов, вместо того, чтобы исследовать разницу фактических .
std::string
- это объекты с различными внутренними членами, которые обычно хранят свои фактические строковые данныекосвенно (динамически или то, что вы можете неточно и ошибочно называть «в куче»);на самом деле, он полностью отвлечен от вас относительно того, как он хранит свои данные.В любом случае, это не просто массив char
.
Используйте предоставляемый им API для получения указателя на массив char
с std::string::data()
или, возможно, std::string::c_str()
... и stop думаю, кодирование .
Кроме того, я сомневаюсь, что это компилируется:
std::string errorBuffer[CURL_ERROR_SIZE];
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
И вы, вероятно, хотели построить std::string
с определенной длиной:
std::string errorBuffer(CURL_ERROR_SIZE);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, &errorBuffer[0]);
// ^ (requires C++11 to be completely safe)
Строки - это объекты, а не необработанные массивы!