我在这里问这个问题之前做了广泛的研究,但我找不到答案。
我有一个简单的结构,其中包含另一个结构的数组和总数:
typedef struct {
int total;
struct Struct1 arrayOfStructs[];
} Struct2;
Struct2 _myVar; // the variable I need
arrayOfStructs[]
应该是包含类型结构的 C 数组Struct1
(此语法无效,因为您需要一个常量值)total
是的计数arrayOfStructs
- (
Struct1
不相关,它只包含一些原始数据)
问题是我希望这个数组是动态的。我希望能够做到这一点:
for (int i = 0; i < _myVar.total; i++) {
NSLog(@"%d", _myVar.arrayOfStructs[i].index);
}
我尝试了以下方法:
typedef struct {
int total;
struct Struct1 *arrayOfStructs; // USING A POINTER HERE
} Struct2;
Struct2 _myVar; // the variable I need
并添加值:
int total = ++_myVar.total; // increase total count
_myVar.arrayOfStructs = realloc(_myVar.arrayOfStructs, total * sizeof(Struct1));
_myVar.arrayOfStructs[total - 1] = {1, 5.3}; // appending a new value in the array
上面的代码正确地添加了值,但是在将它传入NSData
并检索它之后,数组项丢失了,我最终得到了一些错误的指针:
[NSData dataWithBytes:&_myVar length:sizeof(_myVar) + sizeof(Struct1) * total];
我怀疑这是因为我需要做sizeof(_myVar) + sizeof(Struct1) * total
的不仅仅是sizeof(_myVar)
,所以由于指针地址不同,我最终得到了错误的数据。我认为我没有将数据正确复制到我的结构中。
任何帮助将不胜感激!