সি-তে স্ট্রাকচারে ফ্লেক্সিবল অ্যারে মেম্বার (Flexible Array Members) মানে আমরা স্ট্রাকচারের ভিতরে ডাইমেনশন ছাড়া অ্যারে ঘোষণা করতে পারি এবং এর আকার ফ্লেক্সিবল (নমনীয়) হবে। ফ্লেক্সিবল অ্যারে মেম্বার অবশ্যই ক্লাসের শেষ মেম্বার হতে হবে।
এখানে একটি উদাহরণ:
উদাহরণ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// employee টাইপের স্ট্রাকচার এবং কমপক্ষে একটি আর নামযুক্ত মেম্বার থাকতে হবে ফ্লেক্সিবল অ্যারে মেম্বারের পাশাপাশি।
struct employee {
int emp_id;
int name_len;
int emp_size; // 'emp_size' ভেরিয়েবলটি emp_name[] ফ্লেক্সিবল ক্যারেক্টার অ্যারের আকার সংরক্ষণ করতে ব্যবহৃত হয়।
char emp_name[]; // ফ্লেক্সিবল অ্যারে মেম্বার emp_name[] ক্লাসের শেষ মেম্বার হওয়া উচিত।
};
struct employee *createEmployee(struct employee *e, int id, char a[]) {
e = (struct employee *)malloc(sizeof(*e) + sizeof(char) * strlen(a)); // মেমরি অ্যালোকেশন
e->emp_id = id;
e->name_len = strlen(a);
// ইউজার প্রদত্ত অ্যারে a[]-র কপি emp_name-এর আকার অনুযায়ী সাইজ নির্ধারণ।
strcpy(e->emp_name, a);
return e;
}
void printEmployee(struct employee *e) { // কর্মীর ডিটেইলস প্রিন্ট
printf("Employee_id : %d\nEmployee Name : %s\nName Length: %d\n\n", e->emp_id, e->emp_name, e->name_len);
}
int main() {
struct employee *e1 = createEmployee(e1, 26, "Ram");
struct employee *e2 = createEmployee(e2, 53, "Madhu");
printEmployee(e1);
printEmployee(e2);
printf("Size of structure Employee: %lu\n", sizeof(struct employee));
return 0;
}
আউটপুট
Employee_id : 26 Employee Name : Ram Name Length: 3 Employee_id : 53 Employee Name : Madhu Name Length: 5 Size of structure Employee: 12