簡體   English   中英

將std :: string轉換為char數組

[英]Converting an std::string into a char array

我見過許多類似的問題,但似乎沒有一個對我的代碼有效,我認為我忽略了一些基本問題,也許您可​​以提供幫助。

現在,我正在構造一個字符串,該字符串將作為請求發送給winsock send函數,該函數需要發送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";

但是我需要將請求的字符串更改為相同的數據結構。

感謝您的幫助!

編輯

我可以將字符串轉換為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';

如果您有一些帶有此類簽名的舊式C風格API,則期望以null結尾的C風格字符串:

void foo(const char* data);

那么您通常可以執行以下操作:

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

如果您確實需要數據的數組或非const版本,那么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最大大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM