C如何找到结构体数组的长度

时间:2019-12-26 13:40:41

标签: c

我有一个struct数组:

struct Stu* arr = (struct Stu*)calloc(ogr,sizeof(struct Stu));

我有一个void函数,它将arr作为参数,我必须在函数中找到arr的长度。

struct Lsn {
    char lsn_name[50];
}; 
struct Stu {
    char name[40];
    char surname[20];
    char st_id[11];
    struct Lsn* lsn;
};

2 个答案:

答案 0 :(得分:1)

在C语言中,无法确定作为指针传递的数组的长度(大小)。您必须将大小作为参数传递给函数:

void f(void *arr, size_t size);

如果由于一个或另一个原因,这是不可能的,并且如果将数组传递为 empty ,则可以通过将数组的第一个字节设置为长度来进行破解例如:

struct Stu* arr = (struct Stu*)calloc(ogr,sizeof(struct Stu));
*((int *)arr)= ogr;

并在函数中:

size= *((int *)arr);   // get the size
*((int *) arr)= 0;     // reset the first few bytes

答案 1 :(得分:0)

C没有默认的方式来知道所需的数组大小,但是您可以通过传递字符串长度的相同方式来实现它。

在字符串中,字符“ \ 0”给出了结束符,因此,当您计算长度时,函数会对字符进行计数,直到遇到“ \ 0”字符为止。如果内存不是问题,那么您可以额外增加一个结构(分配一个额外的结构内存)。然后在该结构中保留一些独特的内容,这样您就知道它表示结束。然后,您可以在函数中检查该值。