একটি অক্ষরের অ্যারে এবং সি-স্ট্রিংয়ের মধ্যে পার্থক্য কী?


উত্তর 1:

চরের একটি অ্যারে একটি সংক্ষিপ্ত মেমরি স্প্যান যা 8 বিট বাইট হিসাবে পার্স করা হয় creation এটি আকারে স্থির হয় এবং এটি প্রতিটি বাইটে একটি চর সংরক্ষণ করার গ্যারান্টিযুক্ত।

এই ক্ষেত্রে একটি চরটি00000000 (0x00 হেক্স) থেকে 11111111 (0xFF হেক্স) থেকে কোনও 8-বিট বাইনারি অঙ্ক।

চর অ্যারে [100]; / * 100 টি চর অ্যারে [0] অ্যারে করতে [99] * /

একটি সি-স্ট্রিং সঞ্চয়ের জন্য একটি চর অ্যারে ব্যবহার করে। একটি সি-স্ট্রিং 0 থেকে অ্যারের বিয়োগের দৈর্ঘ্য 1 অক্ষর দীর্ঘ হতে পারে।

সুগঠিত হওয়ার জন্য, অ্যারেটিতে ব্যবহৃত অক্ষরটিতে বৈধ প্রতীকগুলি উপস্থাপন করে কেবল বাইটের একটি উপসেট থাকতে পারে। প্রায়শই এটি ASCII বা UTF-8. হয় অন্য কোনও বাইট স্ট্রিং প্রিন্ট বা ব্যাখ্যার সময় বৈধ হতে পারে না।

স্ট্রিংটিতে একটি লেবেল (ভেরিয়েবল) থাকবে যা একটি অক্ষর পয়েন্টার (চর *) টাইপ করে যা অ্যারের ঠিকানা ধারণ করে।

স্ট্রিংটির একটি নূকার ('\ 0', 0x00 হেক্স) থাকবে স্ট্রিংটির শেষ অক্ষরের পরে স্ট্রিংটি সমাপ্তি।

চর এস [10]; চর * টি = & গুলি; strncpy (টি, "012345678 \ 0", 10)

সোর্স কোডে একটি 'তাত্ক্ষণিক স্ট্রিং' ডাবল উদ্ধৃতিতে রচিত হয় এবং বর্ণগুলি পূরণ করে একটি বিশেষ স্ট্রিং-পঠনযোগ্য কেবল মেমরি অবস্থানে স্থাপন করা হয় এবং এর সাথে একটি পয়েন্টার ফিরে আসে। এটি সংকলক দ্বারা "সিনট্যাক্স চিনি" এবং এ জাতীয় স্ট্রিংগুলি ব্যবহার করা সহজ করে তোলে। একটি NULCHAR স্বয়ংক্রিয়ভাবে অ্যারে এটিকে একটি সুসংগঠিত স্ট্রিং হিসাবে যুক্ত করা হয়।

চর * s = "একটি তাত্ক্ষণিক স্ট্রিং"; প্রিন্টফ ("% s \ n), গুলি);

সমস্ত স্ট্যান্ডার্ড সি লাইব্রেরি স্ট্রিং ফাংশন চর * গুলি হিসাবে স্ট্রিংগুলি পাস করে এবং উপস্থিত '\ 0' এর উপর নির্ভর করে।

একটি "হ্যাক" যা মোটামুটি সর্বজনীনভাবে ব্যবহৃত হয় এটি হ'ল অ্যারের প্রথম উপাদানটির পয়েন্টার হিসাবে ডাবল হয়ে গেলে অ্যারের লেবেল। এবং বিপরীতভাবে.

চর * x = "abcdefgh"; প্রিন্টফ ("x 4 র্থ চর:% গ \ n", এক্স [3]); x 4 র্থ চর: d / * একটি স্ট্রিংকে একটি চর অ্যারে * / চর / [100] এ রেখে দিন; strncpy (str, "abcdefghijklmnop \ 0", 18); চর * a = str; চর * বি = টিআর + 7; প্রিন্টফ ("% s \ n", ক); abcdefghijklmnop printf ("% s \ n", খ); hijklmnop

এই নমনীয়তা সত্ত্বেও, একটি চর অ্যারে এবং একটি সি-স্ট্রিং সরাসরি সামঞ্জস্যপূর্ণ নয়।

চর এস [10]; s = "abcdefghi"; / * ত্রুটি * / // ত্রুটি: 'চর [10]' টাইপ থেকে 'চর' 'টাইপ করার সময় অসামঞ্জস্যিত প্রকারগুলি "অ্যাবসিডিফঘি" একটি তাত্ক্ষণিক স্ট্রিং এবং এটির জন্য তৈরি অ্যারেতে' এ 'এর পয়েন্টারের সমাধান করে। এটিকে অ্যাসাইন করা কার্যকর হয় না, কারণ চর অ্যারেগুলি অর্পণযোগ্য নয়।

অ্যারেগুলি সি-তে প্রথম শ্রেণীর ধরণের নয়, এগুলি সরাসরি অনুলিপি করা যায় না, তাদের অ্যারে-লেভেলের কোনও ক্রিয়াকলাপ নেই ইত্যাদি। সি-এ অ্যারে দিয়ে করা সমস্ত কিছু একক হিসাবে নয়, পৃথক সামগ্রীতে করা হয়।

চর এস [10]; চর * x = "abcdefghi"; / * '\ 0' এর শেষে * / স্ট্রেনকিপি (গুলি, এক্স, 10) রয়েছে; / * অ্যারে প্রতিটি চরিত্রের অনুলিপি * /

উত্তর 2:

একটি অক্ষর অ্যারে হ'ল সি প্রোগ্রামিং ভাষায় একটি ডেটা স্ট্রাকচার: মেমরিতে কয়েকটি বাইট যা আপনি অক্ষর সংরক্ষণ করতে পারেন। আপনি এগুলির প্রতিটি কক্ষে যেকোন অক্ষর (অর্থাত্ 8-বিটের বাইটস, 0 থেকে 255 এর মান) সংরক্ষণ করতে পারেন।

একটি সি-স্টাইল স্ট্রিং (আমি আপনার প্রশ্নের অর্থ "সি-স্ট্রিং" হিসাবে কী ব্যাখ্যা করি) হ'ল অক্ষরগুলির একটি "স্ট্রিং" উপস্থাপন করার একটি উপায়, সি ভাষা দ্বারা নাল বাইট ছাড়াই সংখ্যক অক্ষর হিসাবে চিহ্নিত করা হয় 0)। এটি সেই অক্ষরগুলির দ্বারা প্রতিনিধিত্ব করা হয় যার পরে তারা নাল বাইট অনুসরণ করে, এভাবে স্ট্রিংয়ের দৈর্ঘ্য আলাদাভাবে সংরক্ষণ করার প্রয়োজন নেই। এটি পাস্কাল-স্টাইলের স্ট্রিংয়ের সাথে বিপরীতে করুন, যেখানে এটি 16-বিট স্বাক্ষরবিহীন পূর্ণসংখ্যার পরে তথ্য সংখ্যার বাইট সংখ্যাটি অনুসরণ করে (যাতে পাস্কাল স্ট্রিংয়ের দৈর্ঘ্য সর্বাধিক 65535 হয়) represented

সুতরাং অক্ষর অ্যারে একটি ডেটা স্ট্রাকচার, সি-স্টাইল স্ট্রিং হ'ল ডেটা উপস্থাপনা। তারা বিভিন্ন জন্তু।

একটি অক্ষরের অ্যারে একটি সি-স্টাইলের স্ট্রিং ধরে রাখতে পারে, বা এটি অন্য কিছু ধারণ করতে পারে (উদাহরণস্বরূপ, এতে নাল চরিত্রের পরে দরকারী তথ্য রয়েছে বা এতে কোনও নাল অক্ষর নেই); এবং তা সত্ত্বেও আপনি এটিকে যে কোনও উপায়ে সি-স্টাইলের স্ট্রিং হিসাবে ব্যাখ্যা করতে সক্ষম হতে পারেন (যতক্ষণ না এটি অন্তত একটি নাল অক্ষর ধারণ করে)। একটি সি-স্টাইলের স্ট্রিং একটি অক্ষর অ্যারেতে সংরক্ষণ করা যেতে পারে, বা এটি কোথাও অ্যারে হিসাবে সংরক্ষণ করা যায় না (যেমন, মেমরির কেবল পঠনযোগ্য অংশ এবং এইভাবে অন্যান্য মানগুলি "সঞ্চয়" করতে পারে না)।