如何获取结构的可变大小数组的长度?

问题描述

我正在努力解决这个问题,但我一直无法解决。 鉴于我有一个结构:

struct person
{
     String name,String city,int age
}

我正在从外部提供的某个文件中读取人员列表,并填充此结构的数组。可以通过一个函数来完成,可以说

person * readFromFile(filename);

函数具有读取文件,创建可变大小的结构数组(以适应文件中的人数)并返回所述数组的逻辑。

但是,当我尝试将结果分配给指针时,我没有得到数组的元素:

...
person * myPeople;
myPeople = readFromFile("/people.txt");
int n= ;// different things I-ve tried here
Serial.println("n is" + n);
for(int i=0; i<n; i++)
{ 
     Serial.println(myPeople.name + " (" + String(myPeople.age) + "),"+myPeople.city
}

研究了如何做之后,我尝试了几种方法获取数组填充后的元素数量

int n = sizeof(myPeople)/sizeof(myPeople[0]);
int n = sizeof myPeople / sizeof *myPeople;
int n = sizeof(myPeople) / sizeof(person);
int n = (&myPeople)[1] - myPeople;

但是无济于事:我在文件中有5个元素,但是n从未显示期望值(当然还有for循环中断)。

我可以得到一些帮助吗?我在做什么错了?

谢谢

解决方法

不要使用“ String”(无论您使用哪种情况),而是对每个字符串使用固定的char数组。

像这样:

struct person
{
     char name[32],/* string name has a length of 31 + 1 for NULL-termination */
     char city[32],/* string city has a length of 31 + 1 for NULL-termination */
     int age
}