如何获取可变大小的结构数组的长度?
How to get the length of a variable size array of structs?
我正在努力解决这个问题,但一直无法解决。
鉴于我有一个结构:
struct person
{
String name,
String city,
int age
}
我正在从外部提供的某个文件中读取人员列表,并填充此结构的数组。这是通过一个函数完成的,比方说
person * readFromFile(filename);
这个函数有读取文件的逻辑,创建一个可变大小的结构数组(适应文件中的人数),return表示数组。
但是,当我尝试将该结果分配给指针时,我没有得到数组的元素:
...
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
}
我正在努力解决这个问题,但一直无法解决。 鉴于我有一个结构:
struct person
{
String name,
String city,
int age
}
我正在从外部提供的某个文件中读取人员列表,并填充此结构的数组。这是通过一个函数完成的,比方说
person * readFromFile(filename);
这个函数有读取文件的逻辑,创建一个可变大小的结构数组(适应文件中的人数),return表示数组。
但是,当我尝试将该结果分配给指针时,我没有得到数组的元素:
...
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
}