Flexible Array Member In C
- Flexible array member is special type of array whose dimension are unspecified.
Syntax- <data_type> array_name[];
- They Should be defined at last within structure.
- There should be one more named variable in addition to flexible array member.
- The size for this flexible array member is not allocated when the object is instantiated.
#include <stdio.h> struct st { int var_a; int var_b; char flex_arr[]; }; int main() { struct st obj; printf("sizeof of obj = %d\n", sizeof(obj)); return 0; }
Output : sizeof of obj = 8
Why we need it?
Imagine you need a data whose size is not confirmed. It can be a simple string or whole structure content. In that case flexible array member can be helpful.
Because the size for it can be allocated during run-time. The only thing is you should know the maximum size of data which it can be. So, you can allocate memory for it.
Example:
#include <stdio.h> typedef struct { int age; int height; char name[]; }person; int main() { person *man = (person*) malloc(sizeof(person)+sizeof(char)*7); man->age = 30; man->height = 160; scanf("%s", man->name); printf("%d %d %s", man->age, man->height, man->name); }
The same we can assigned the member through a function also
#include <stdio.h> typedef struct { int age; int height; char name[]; }person; void insert_data(person *per,int age, int height, char arr[] ) { per=(person*)malloc(sizeof(person)+strlen(arr)); per->age=age; per->height=height; strcpy(per->name=arr); } int main() { int age, height; scanf("%d %d",&age,&height,); person *man = insert_data(man, age, height, "kartik"); //printing the data of man printf("%d %d %s", man->age, man->height, man->name); }
Similarly, In flexible array member we can have data of another structure also.
Contributed by :
This article is contribute by Priyanka Singh. She is having very good experience in multiple technologies & also a good mentor. For more information about her, please click here..
Reference: