将std :: string转换为char数组

gos*_*sly 3 c++ string winsock type-conversion char

我见过很多类似的问题,但似乎没有一个问题适合我的代码,我想我忽略了一些基本的东西,也许你可以提供帮助.

现在我正构造一个字符串作为请求发送到winsock发送函数,这需要发送char [].我需要将我的std :: string转换为char数组(char []).

目前这是有效的请求:

char request [] = "GET /gwc/cgi-bin/fc?client=udayton0.1&hostfile=1HTTP/1.0\nHost:www.gofoxy.net\n\n";
Run Code Online (Sandbox Code Playgroud)

但我需要将一个请求的字符串更改为相同的数据结构.

我感谢任何帮助!

编辑:

我可以将字符串转换为char*,但是如何使用它来获取字符数组呢?我希望我不会让它更加混乱.以下是两次尝试在运行时生成与发送请求不兼容的char star:

//convert request into a char[]
//char *req_ch = new char[req_str.size()+1];
//hostCh[req_str.size()] = 0;
//memcpy(req_ch, req_str.c_str(), req_str.size());

//char * req = new char[req_str.size() +1];
//std::copy(req_str.begin(), req_str.end(), req);
//req[req_str.size()] = '\0';
Run Code Online (Sandbox Code Playgroud)

Bri*_*eal 8

如果您有一些具有此类签名的传统C风格API,那么期望一个空终止的C风格字符串:

void foo(const char* data);
Run Code Online (Sandbox Code Playgroud)

那么你通常可以这样做:

std::string s("my string data");
foo(s.c_str());
Run Code Online (Sandbox Code Playgroud)

如果你真的需要一个数组或非const版本的数据,那么API是这样的:

void foo(char* data, std::size_t len);  // or foo(char[] data, std::size_t len);
Run Code Online (Sandbox Code Playgroud)

然后你可以做这样的事情:

std::string s("my string data");
std::vector<char> v(s.begin(), s.end());
foo(&v[0], v.size());    // or foo(v.data(), v.size()); in C++11
Run Code Online (Sandbox Code Playgroud)