簡體   English   中英

C ++返回整個null分隔的字符串

[英]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.

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