স্ট্রিং আক্ষরিক দিয়ে একটি চর অ্যারে আরম্ভ করার পক্ষে এটি খারাপ অভ্যাস।
এই মন্তব্যের লেখক কখনই এটিকে সত্য বলে প্রমাণিত করে না এবং আমি বিবৃতিটি বিস্মিত মনে করি।
সিতে (এবং আপনি এটি সি হিসাবে ট্যাগ করেছেন), স্ট্রিংয়ের মান দিয়ে একটি অ্যারে শুরু করার একমাত্র উপায় এটি char
(আর্কিয়নাইজেশন অ্যাসাইনমেন্টের চেয়ে পৃথক)। আপনি লিখতে পারেন
char string[] = "october";
অথবা
char string[8] = "october";
অথবা
char string[MAX_MONTH_LENGTH] = "october";
প্রথম ক্ষেত্রে, অ্যারের আকারটি আরম্ভকারীর আকার থেকে নেওয়া হয়। স্ট্রিং লিটারেলগুলি char
0 টি বাইটের সমাপ্তি হিসাবে অ্যারে হিসাবে সংরক্ষণ করা হয় , সুতরাং অ্যারের আকার 8 ('ও', 'সি', 'টি', 'ও', 'বি', 'ই', 'আর', 0)। দ্বিতীয় দুটি ক্ষেত্রে, অ্যারের আকার ঘোষণার অংশ হিসাবে নির্দিষ্ট করা হয় (8 এবং MAX_MONTH_LENGTH
, যাই হোক না কেন ঘটুক)।
আপনি যা করতে পারবেন না তা হ'ল কিছু লেখা
char string[];
string = "october";
অথবা
char string[8];
string = "october";
ইত্যাদি প্রথম ক্ষেত্রে, ঘোষণা string
করা হয় অসম্পূর্ণ কারণ অ্যারের আকার নির্দিষ্ট করা হয়েছে এবং সেখান থেকে আকার গ্রহণ করার কোন সূচনাকারী আছে। উভয় ক্ষেত্রেই, =
কাজ করবে না কারণ ক) একটি অ্যারে এক্সপ্রেশন যেমন string
কোনও অ্যাসাইনমেন্টের লক্ষ্য নাও হতে পারে এবং খ) =
অপারেটর কোনওভাবেই একটি অ্যারের সামগ্রী অনুলিপি করার জন্য সংজ্ঞায়িত হয়নি isn't
একই টোকেন দ্বারা, আপনি লিখতে পারবেন না
char string[] = foo;
foo
অন্য আরে যেখানে char
। প্রারম্ভিকতার এই ফর্মটি কেবল স্ট্রিং লিটারেলের সাথে কাজ করবে।
সম্পাদনা
আমার এটিকে সংশোধন করা উচিত যে আপনি অ্যারে-স্টাইল ইনিশিয়ালাইজারের সাথে স্ট্রিং ধরে রাখার জন্য অ্যারেগুলিও আরম্ভ করতে পারেন like
char string[] = {'o', 'c', 't', 'o', 'b', 'e', 'r', 0};
অথবা
char string[] = {111, 99, 116, 111, 98, 101, 114, 0}; // assumes ASCII
তবে স্ট্রিং লিটারেল ব্যবহার করা চোখে সহজ।
সম্পাদনা 2
ঘোষণার বাইরে অ্যারের সামগ্রীগুলি নির্ধারণের জন্য , আপনাকে strcpy/strncpy
(0-সমাপ্ত স্ট্রিংগুলির জন্য) বা memcpy
(অন্য কোনও ধরণের অ্যারের জন্য) ব্যবহার করতে হবে:
if (sizeof string > strlen("october"))
strcpy(string, "october");
অথবা
strncpy(string, "october", sizeof string); // only copies as many characters as will
// fit in the target buffer; 0 terminator
// may not be copied, but the buffer is
// uselessly completely zeroed if the
// string is shorter!