将std::字符串转换为char数组

Converting an std::string into a char array

本文关键字:char 数组 字符串 std 转换      更新时间:2023-10-16

我见过很多类似的问题,但似乎都不适用于我的代码,我认为我忽略了一些基本的问题,也许你可以帮忙。

现在,我正在构建一个字符串,作为对winsock send函数的请求发送,该函数需要发送一个char[]。我需要将我的std::字符串转换为一个char数组(char[])。

目前这是有效的请求:

char request [] = "GET /gwc/cgi-bin/fc?client=udayton0.1&hostfile=1HTTP/1.0nHost:www.gofoxy.netnn";

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

我感谢任何帮助!

编辑

我可以将字符串转换为char*,但如何使用它来获得字符数组?我希望我没有让它变得更令人困惑。这是两次尝试生成与send不兼容的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()] = '';

如果您有一些传统的C样式API,它的签名是这样的,其中它需要一个空终止的C样式字符串:

void foo(const char* data);

然后你通常可以做一些类似的事情:

std::string s("my string data");
foo(s.c_str());

如果您真的需要一个数组,或者一个非约束版本的数据,那么API就是这样的:

void foo(char* data, std::size_t len);  // or foo(char[] data, std::size_t len);

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

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

您真的需要char[]还是char const*

如果是后者,c_str()将执行您想要的操作。

如果是前者,那么你需要将字符串复制到你想要的东西中:

std::vector<char> buff(str.size() + 1); // initializes to all 0's.
std::copy(str.begin(), str.end(), buff.begin());
fun_call(&buff[0]);

很可能您只需要c_str版本。如果你需要这个第二个版本,那么你正在阅读,希望能提供一个最大的buff大小。