Вы можете получить указатель на строковый буфер, просто вызвав std::string.c_str()
. Это вернет const char*
(где char
- int8_t
), которое вы можете эффективно использовать как byte[]
. Имейте в виду, что возвращаемый указатель указывает на память, управляемую строковым объектом, поэтому, если вы измените что-либо в исходном строковом классе, вы лишите законной силы указатель. Кроме того, так как это указатель на const char
, вы не должны изменять какие-либо значения в буфере. Поэтому, если вам нужно больше постоянной памяти, или вам нужен буфер, который вы можете изменить, лучшим способом для достижения вашей цели было бы сделать (используя gcc, что не должно быть проблемой, так как вы работаете в Ubuntu):
std::string my_string;
char string_array[my_string.length() + 1];
strcpy(string_array, my_string.c_str());
Теперь используйте string_array
в качестве буфера памяти.
Если вам нужно вернуть буфер из функции, вам нужно выделить буфер в куче и вернуть указатель. Это также означает, что вам придется вызывать delete []
и для указателя после того, как вы покончили с ним, иначе вы столкнетесь с утечкой памяти. Таким образом, вы можете сделать следующее:
#include <string>
#include <cstring>
char* return_buffer(const std::string& string)
{
char* return_string = new char[string.length() + 1];
strcpy(return_string, string.c_str());
return return_string;
}
//now use in code
int main()
{
std::string some_string = "Stuff";
char* buffer = return_buffer(some_string);
//...do something with buffer
//...after you're done with the buffer to prevent memory leak
delete [] buffer;
return 0;
}