簡體   English   中英

如何在 C++ 的結構中堆疊 char[]

[英]How to stack a char[] inside a structure in C++

我已經為此苦惱了一段時間。 我在網上找不到任何適當的參考。

我有一個里面有 char data[] 的結構。 比如說——

struct mystruct
{
    char mydata[];
};

無論我想要什么,我如何創建一個具有數據長度的mystruct變量。

這有效-

mystruct my {"Test"};

但是我如何使用另一個變量來做到這一點。

char data[] = "Test";
mystruct my {data}; // this doesn't work as data becomes char* and there is a type mismatch

如何以 c++ 方式將數據分配給 mydata?

編輯:假設結構來自第 3 方庫並且無法更改

mystruct你聲明char mydata[]; 作為一個不完整的類型(一個數組,但不是多少)。 該類型的object的具體使用來自C。 通過允許不完整類型的數組作為結構的最后一個成員,在 C 中,這為您提供了為結構本身動態分配存儲空間的能力,以及您想要的mydata[]的任何存儲量,然后能夠訪問通過mydata[]獲取信息。

這是正式的靈活數組成員(FAM),它必須是結構的最終成員,其他成員也存在,此后該結構不能是另一個結構或結構數組的一部分,因為會有在使用 FAM 的任何結構 object 中只允許使用一個 FAM。

令人困惑的是您的標簽 [c++] 不會提供 FAM 供使用,這嚴格來說是 C 成語。

我希望這能提供您需要的信息。 如果您還有其他問題,請在下面發表評論。 祝你的編碼好運。

任何匯編級“長度”在 C++ 中都是編譯時,它不能在運行時更改。 相反,您使用std::vector<>動態分配 memory 。 或者你可以使用std::any來保存你想要的任何變量。

基本上,您正在混合危險的指針。 您的 data[] 不包含“字符串”,而是指向它。 它不適用於容器等中的復制和所需語義。

忘記所有,使用 STL。

struct data
{ 
    std::vector<char> member1;
    std::any member2;
    std::string member3;
};

所有問題都有效且正確地解決了。

暫無
暫無

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

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