[英]C++ Return entire null separated string
我需要給一個函數一個空終止的字符序列,但我無法弄清楚如何從字符串文字最終到一個字符指針。 問題在這里展示:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
std::string str ("this\0is a\0null separated\0string");
std::cout << "The size of str is " << str.size() << " bytes.\n\n";
return 0;
}
我目前的代碼有效..
std::string tmp = g_apidefs[i].ret_val +'.'+ g_apidefs[i].parm_types +'.'+ g_apidefs[i].parm_names +'.'+ g_apidefs[i].html_help;
size_t length = 1+strlen(tmp.c_str());
g_apidefs[i].dyn_def = new char[length];
memcpy(g_apidefs[i].dyn_def, tmp.c_str(), length);
char* p = g_apidefs[i].dyn_def;
while (*p) { if (*p=='.') *p='\0'; ++p; }
ok &= rec->Register(g_apidefs[i].regkey_def, g_apidefs[i].dyn_def) != 0;
......它轉過來了.
進入\\0
,但是有沒有辦法讓\\0
首先出現? 我最初使用strdup(少了幾行代碼),但有一些特定於平台的不兼容問題。
我想知道是否有C ++ 11或C ++ 14處理這個問題的方法?
您可以使用char
數組並使用此數組的迭代器初始化您的字符串,例如:
template <int N>
std::string make_string(char const (&array)[N]) {
return std::string(array, array + N);
}
int main() {
std::string s = make_string("foo\0bar");
}
根據定義,字符串還將包含終止空字符。 如果不需要,只需減1
。 這適用於所有版本的C ++。
我發布了自己的答案,以防有人發現它有用:
std::vector<std::string> str_vect ={ str1,str2,str3,str4 };
std::vector<char> char_arr
for (const auto& str : str_vect) {
char_arr.insert(char_arr.end(), str.begin(), str.end());
char_arr.push_back('\0');
}
這是我真正需要的答案,它非常簡單,不確定我是如何花費數小時試圖弄明白的
// str is a global variable, so it is safe to reference it with &
string str = str1 + '\0' + str2 + '\0' + str3 + '\0' + str4;
func_that_needs_null_separated_str(&str[0]);
感謝@DietmarKühl的小小提示,最終引導我得出這個結論。
好的。 現在,這個Stackoverflow問題解決了處理空字符的兩個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.