我正在尝试获取结构数组中的元素数量,以便将其传递给另一个函数。结构:
struct info{
char string1[30];
float float1;
int int1;
char string2[30];
};
我正在尝试运行的部分:
void function1(){
struct info* temp = build();
printf("flag: %lu %lu %lu\n", sizeof(temp), sizeof(temp[0]), sizeof(temp)/sizeof(temp[0]));
sortFloat(temp, sizeof(temp)/sizeof(temp[0]), 1);
free(temp);
}
build() 在从文件中读取数据后返回一个结构数组,其中每一行都是数组中的一个结构。我在将数组大小传递给 sortFloat() 时遇到问题。打印行返回
flag: 8 72 0
当数据文件中只有两行时。将该参数硬编码为 2 会使整个程序正常工作。为什么这种计算结构数组元素的方法不是?
最佳答案
sizeof(temp)
不会评估数组中元素的数量。它将计算为指针的大小。
如果你需要数组的大小,你可以这样做:
将 build
的签名更改为:
struct info* build(int* sizePtr);
确保 sizePtr
在实现中正确设置。
然后,调用它:
int size;
struct info* temp = build(&size);
关于C,无法获取结构数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28512927/