【发布时间】:2019-06-27 12:40:14
【问题描述】:
我正在尝试在 showValues(mainStruct*) 中打印数据,但我无法这样做..
#include <iostream>
#include <string>
#include <vector>
#include <memory>
typedef struct
{
uint32_t someNumber;
}subStruct;
typedef struct{
uint32_t sizeofSubStruct;
subStruct subStructArray[1];
}mainStruct;
这个函数构造 mainStruct 并用一些值填充它
mainStruct* constructMainStruct()
{
mainStruct* msPtr;
msPtr = (mainStruct*)malloc(sizeof(mainStruct)*10);
msPtr->sizeofSubStruct = 10;
subStruct* ssPtr = msPtr->subStructArray;
for(uint32_t i=0; i < msPtr->sizeofSubStruct; i++)
{
ssPtr->someNumber = i+10;
ssPtr++;
}
return msPtr;
}
以下函数不打印任何内容
void showValues(mainStruct* msPtr)
{
subStruct* ssPtr = msPtr->subStructArray;
for(uint32_t i=0; i < msPtr->sizeofSubStruct; i++)
{
std::cout << " - " + ssPtr->someNumber <<std::endl;
}
}
主要功能
int main()
{
//contructing mainStruct with some values
mainStruct* msPtr = constructMainStruct();
//trying to print values which has been created in above step
showValues(msPtr);
}
【问题讨论】:
-
灵活数组成员在 C 中,这个问题有 C++ 标签。 C++ 没有灵活的数组。您应该根据要求使用
std::vector或std::array。 -
为什么使用
malloc?为什么不new? -
为什么要使用原始指针和原始数组?只需使用容器类,如
std::vector和std::array。 -
在 C++ 中,灵活的数组成员习语是未定义的行为。
-
不!不幸的是我不能使用向量或数组,它应该是原样。关于灵活数组,因为它是 c++,所以我必须给出代码中提到的大小 [1]。
标签: c++ data-structures dynamic struct nested