Странно, потому что я сделал это раньше, но он просто не работает. У меня есть структура xmp_frame
вот так.Найти нет. элементов в массиве структур?
typedef struct {
short int attr_dtype;
short int attr_code;
short int attr_len;
const char *attr;
}xmp_frame;
Теперь я создаю массив xmp_frame
и использовать их люблю:
xmp_frame frame_array[]={
{1,2,strlen("Hello there"),"Hello there"},
{1,3,strlen("This is not working"),"This is not working"},
{0,3,strlen("But why??"),"But why??"}
};
Теперь у меня есть рутина, которая в основном записывает frame_array
, чтобы файл:
short int write_frames(xmp_frame frame_array[],FILE *outfp){
}
Перед тем, как написать frame_array
Мне нужно получить нет. элементов в frame_array[]
для выполнения некоторой обработки. Так что это, как мы делаем это (в целом):
short int write_frames(xmp_frame frame_array[],FILE *outfp) {
short intnum_frames=sizeof(frame_array)/sizeof(frame_array[0]);
/*But i get the value of num_frames as 0. I will print the outout of some debugging.*/
fprintf(stderr,"\n Size of frame_array : %lu",sizeof(frame_array)); //prints 8
fprintf(stderr,"\n Size of frame_array[0] : %lu",sizeof(frame_array[0])); //prints 16
fprintf(stderr,"\n So num. of frames to write : %d", (sizeof(frame_array))/(sizeof(frame_array[0]))); //prints 0
}
Конечно, если frame_array
8 байт и frame_array[0]
составляет 16 байт, то num_frames
будет 0.
Но вопрос в том, как может размер массив будет меньше одного из его элементов? Я слышал о заполнении байтов.
У меня нет большой идеи, если это вызывает проблему. Вот одна из ссылок, на которые я ссылался: Result of 'sizeof' on array of structs in C?
Хотя я нашел несколько обходных решений, чтобы определить размер массива структур.
Получить №. элементов из вызывающей и
другой в обязательном порядке получить последний элемент структуры, как
{0,0,0,NULL}
, а затем вwrite()
чек на его присутствие и остановить сканированиеframe_array
дальше.
Но оба зависят от вызывающего, чего вы не можете доверять. Итак, где реальная проблема. И как я могу определить значение num_frames
?
Да, я думаю, мне придется идти с проезжающим размером. Но какой из двух подходов я упомянул лучше? – tnx1991
@ tnx1991: Любой подход прекрасен. Выберите тот, который лучше подходит для вашей ситуации. – casablanca