我有一个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;
};
答案 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”字符为止。如果内存不是问题,那么您可以额外增加一个结构(分配一个额外的结构内存)。然后在该结构中保留一些独特的内容,这样您就知道它表示结束。然后,您可以在函数中检查该值。