স্ট্রিংয়ের পয়েন্টার অ্যারে কী?
একটি অ্যারে যার প্রতিটি এলিমেন্ট একটি স্ট্রিংয়ের বেস এড্রেস (প্রথম ক্যারেক্টারের ঠিকানা) ধারণ করে। এটি ২D ক্যারেক্টার অ্যারে থেকে আলাদা — এখানে প্রতিটি স্ট্রিংয়ের সাইজ আলাদা হতে পারে, মেমরি বাঁচায়।
ঘোষণা ও ইніশিয়ালাইজেশন
char *names[3] = {"one", "two", "three"};
// names[0] → "one" এর বেস এড্রেস
// names[1] → "two" এর বেস এড্রেস
// names[2] → "three" এর বেস এড্রেস
সু Brigada
- ২D ক্যারেক্টার অ্যারেতে প্রতিটি রোয়ের ফিক্সড সাইজ থাকে (স্পেস বর্জ্য)।
- পয়েন্টার অ্যারেতে প্রতিটি স্ট্রিং শুধু নিজের দরকারতörtén 스페স নেয়।
- স্ট্রিং লিটারেলস রিড-অনলি মেমরিতে থাকে — সেগুলো মডিফাই করা উচিত নয়।
উদাহরণ ১: কম্পাইল-টাইম ইনিশিয়ালাইজেশন
#include <stdio.h>
int main() {
char *arr[5] = {"one", "two", "three", "four", "five"};
int i;
printf("Strings:\n");
for (i = 0; i < 5; i++)
printf("%s\n", arr[i]);
return 0;
}
আউটপুট
Strings: one two three four five
উদাহরণ ২: ছাত্রদের নামের লিস্ট
#include <stdio.h>
int main() {
char *students[] = {"bhanu", "ramu", "hari", "pinky"};
int n = sizeof(students) / sizeof(students[0]);
printf("Student names:\n");
for (int i = 0; i < n; i++)
printf("%s\n", students[i]);
return 0;
}
আউটপুট
Student names: bhanu ramu hari pinky
রানটাইমে ইনপুট নেওয়া (malloc ব্যবহার করে)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *names[3];
char buffer[100];
for (int i = 0; i < 3; i++) {
printf("Enter name %d: ", i+1);
fgets(buffer, sizeof(buffer), stdin);
buffer[strcspn(buffer, "\n")] = '\0';
names[i] = malloc(strlen(buffer) + 1);
strcpy(names[i], buffer);
}
printf("\nNames entered:\n");
for (int i = 0; i < 3; i++) {
printf("%s\n", names[i]);
free(names[i]); // মেমরি ফ্রি করুন
}
return 0;
}
সারসংক্ষেপ
char *arr[N]— স্ট্রিং পয়েন্টার অ্যারে।- স্ট্রিং লিটারেলস ব্যবহার করলে সেগুলো রিড-অনলি।
- রানটাইমে ডাইনামিক স্ট্রিং için
malloc+strcpyব্যবহার করুন এবংfreeকরতে ভুলবেন না।