C,无法获取结构数组的大小

标签 c arrays struct sizeof

我正在尝试获取结构数组中的元素数量,以便将其传递给另一个函数。结构:

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/

相关文章:

C# Vector2 代码

C - 段错误(核心转储),从文件中读取前 N 个字节

python - 如何在python中获取垃圾值

java - 在解决了最初的越界异常后,如何将 a 与 b 或 c 相乘

c# - 数组语义初始值设定项如何在 C# 中工作?

php - 在 PHP 中递归更改数组值

c++ - 指向另一个文件中定义的结构的指针

c - 有没有办法让结构的某些成员不可修改?

c++ - 如何防止用户读取存储在二进制文件中的字符串?

C语言或编程