问题描述
我正在努力解决这个问题,但我一直无法解决。 鉴于我有一个结构:
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
}