সি তে স্ট্রিংগুলির অ্যারে তৈরি করার বিভিন্ন উপায় রয়েছে যদি সমস্ত স্ট্রিং একই দৈর্ঘ্য হতে চলেছে (বা কমপক্ষে একই সর্বোচ্চ দৈর্ঘ্য থাকতে পারে), আপনি খালি একটি 2-ডি অ্যারে ঘোষণা করুন এবং প্রয়োজনীয় হিসাবে নির্ধারণ করুন:
char strs[NUMBER_OF_STRINGS][STRING_LENGTH+1];
...
strcpy(strs[0], aString); // where aString is either an array or pointer to char
strcpy(strs[1], "foo");
আপনি পাশাপাশি প্রাথমিকের একটি তালিকা যুক্ত করতে পারেন:
char strs[NUMBER_OF_STRINGS][STRING_LENGTH+1] = {"foo", "bar", "bletch", ...};
এটি আপনার অ্যারের মাত্রাগুলির সাথে মিলিয়ে ইনিশিয়ালাইজারের স্ট্রিংয়ের আকার এবং সংখ্যা ধরে নেয়। এই ক্ষেত্রে, প্রতিটি স্ট্রিং আক্ষরিক (যা নিজেই চরের শূন্য-সমাপ্ত অ্যারে) এর সামগ্রীগুলি স্ট্রান্সকে বরাদ্দ করা মেমোরিতে অনুলিপি করা হয়। এই পদ্ধতির সাথে সমস্যাটি হ'ল অভ্যন্তরীণ খণ্ডিত হওয়ার সম্ভাবনা; আপনার যদি 5 টি অক্ষর বা তার চেয়ে কম 99 টি স্ট্রিং থাকে তবে 1 টি স্ট্রিং যা 20 টি অক্ষর দীর্ঘ, 99 স্ট্রিংগুলিতে কমপক্ষে 15 অব্যবহৃত অক্ষর থাকবে; এটা জায়গা অপচয়।
চরের 2-ডি অ্যারে ব্যবহারের পরিবর্তে, আপনি চরে পয়েন্টারগুলির 1-d অ্যারে সঞ্চয় করতে পারেন:
char *strs[NUMBER_OF_STRINGS];
মনে রাখবেন যে এই ক্ষেত্রে, আপনি কেবল স্ট্রিংগুলিতে পয়েন্টার ধরে রাখতে মেমরি বরাদ্দ করেছেন; স্ট্রিংগুলির জন্য স্মৃতিটি অন্যত্র বরাদ্দ করতে হবে (হয় স্ট্যাটিক অ্যারে হিসাবে বা ব্যবহারের মাধ্যমে malloc()
বা calloc()
)। আপনি পূর্বের উদাহরণের মতো ইনিশিয়ালাইজার তালিকাটি ব্যবহার করতে পারেন:
char *strs[NUMBER_OF_STRINGS] = {"foo", "bar", "bletch", ...};
স্ট্রিং ধ্রুবকগুলির বিষয়বস্তু অনুলিপি করার পরিবর্তে আপনি কেবল তাদের পয়েন্টারগুলি স্টোর করছেন। নোট করুন যে স্ট্রিং ধ্রুবকগুলি লিখিত হতে পারে না; আপনি পয়েন্টারটিকে পুনরায় নিয়োগ করতে পারেন, যেমন:
strs[i] = "bar";
strs[i] = "foo";
তবে আপনি স্ট্রিংয়ের বিষয়বস্তু পরিবর্তন করতে পারবেন না; অর্থাত,
strs[i] = "bar";
strcpy(strs[i], "foo");
অনুমোদিত হতে পারে না।
আপনি malloc()
প্রতিটি স্ট্রিংয়ের জন্য বাফারকে গতিশীলভাবে বরাদ্দ করতে এবং সেই বাফারে অনুলিপি করতে পারেন:
strs[i] = malloc(strlen("foo") + 1);
strcpy(strs[i], "foo");
BTW,
char (*a[2])[14];
চরের 14-উপাদান অ্যারেগুলিকে পয়েন্টারগুলির 2-উপাদান অ্যারে হিসাবে ঘোষণা করে।
char (*a[2])[14]
14 টি অক্ষরের অ্যারেতে দুটি পয়েন্টারের একটি অ্যারে।