নীচের স্ট্রিংটিতে নাল টার্মিনেটর '\ 0' থাকবে?
std::string temp = "hello whats up";
ধন্যবাদ! :)
নীচের স্ট্রিংটিতে নাল টার্মিনেটর '\ 0' থাকবে?
std::string temp = "hello whats up";
ধন্যবাদ! :)
উত্তর:
না, তবে আপনি যদি বলেন temp.c_str()
কোনও নাল টার্মিনেটর এই পদ্ধতি থেকে ফিরে আসবে।
এটি বলার অপেক্ষা রাখে না যে আপনি অন্য কোনও চরিত্রের মতোই কোনও নাল অক্ষরকে স্ট্রিংয়ে অন্তর্ভুক্ত করতে পারেন।
string s("hello");
cout << s.size() << ' ';
s[1] = '\0';
cout << s.size() << '\n';
প্রিন্ট
5 5
এবং 5 1
নাল অক্ষরের স্ট্রিংগুলির একটি বিশেষ অর্থ থাকলে আপনি আশা করতে পারেন না ।
temp.c_str()
করলে নাল চরিত্রটি অন্তর্ভুক্ত করা হবে। আপনার যদি সত্যিই স্ট্রিংয়ের প্রয়োজন হয় তবে এটি অন্য কোনও চরিত্রের মতোই যুক্ত করুন। temp.push_back('\0')
। এখন দুটি নাল অক্ষর temp.c_str()
অন্তর্ভুক্ত করা হবে ।
সি ++ 03 এ নয়, এবং এটি সি ++ 11 এর আগে এমনকি গ্যারান্টিযুক্তও নয় যে একটি সি ++ স্টাড :: স্ট্রিং মেমরিতে অবিচ্ছিন্ন। কেবল সি স্ট্রিং (চর অ্যারে যা স্ট্রিংগুলি সংরক্ষণের উদ্দেশ্যে তৈরি করা হয়েছে) এর নਾਲ টার্মিনেটর ছিল।
সি ++ 11 এবং পরে, mystring.c_str()
সমতূল্য mystring.data()
সমতূল্য &mystring[0]
, এবং mystring[mystring.size()]
হতে নিশ্চিত করা হয় '\0'
।
এটি আপনার 'ধারণাগুলি' এর সংজ্ঞা এখানে নির্ভর করে। ভিতরে
std::string temp = "hello whats up";
এখানে কয়েকটি বিষয় লক্ষণীয়:
temp.size()
প্রথম h
থেকে শেষ পর্যন্ত অক্ষরের সংখ্যা প্রদান করবে p
(উভয়ই অন্তর্ভুক্ত)temp.c_str()
বা temp.data()
কোনও null
টার্মিনেটর নিয়ে ফিরে আসবেint(temp[temp.size()])
হবে শূন্যআমি জানি, আমি উত্তর এখানে কিছু অনুরূপ শব্দ কিন্তু আমি যে বাতলান করতে চান size
এর std::string
মধ্যে C++
হয় আলাদাভাবে পরিচালিত ও এর মত নয় এ C
যেখানে আপনি কাউন্টিং যদি না আপনি প্রথম এটি রাখা null
টারমিনেটর।
যোগ করতে, গল্পটি string literal
এম্বেড থাকলে কিছুটা আলাদা হবে \0
। এই ক্ষেত্রে, নিম্নলিখিত চরিত্রটি নির্মাণের কাজ std::string
থামিয়ে দেয় null
:
std::string s1 = "ab\0\0cd"; // s1 contains "ab", using string literal
std::string s2{"ab\0\0cd", 6}; // s2 contains "ab\0\0cd", using different ctr
std::string s3 = "ab\0\0cd"s; // s3 contains "ab\0\0cd", using ""s operator
তথ্যসূত্র:
হ্যাঁ আপনি যদি কল করেন temp.c_str()
, তবে এটি নাল-টার্মিনেটেড সি-স্ট্রিংটি ফিরে আসবে।
যাইহোক, অবজেক্টে সংরক্ষিত প্রকৃত ডেটা temp
বাতিল-সমাপ্ত হতে পারে না তবে এটি কোনও ব্যাপার নয় এবং প্রোগ্রামারের কাছে তা বিবেচনা করা উচিত নয়, কারণ যখন প্রোগ্রামার const char*
চাইবে তখন সে c_str()
সেই বস্তুকে ডেকে ফেলবে , যা নাল ফেরানোর গ্যারান্টিযুক্ত নির্ধারিত স্ট্রিং।
temp.size()
।
std::string
অভ্যন্তরীণভাবে অক্ষরের সংখ্যা গণনা রাখে। অভ্যন্তরীণভাবে এটি এই গণনাটি ব্যবহার করে কাজ করে। অন্যরা যেমন বলেছে, আপনার যখন প্রদর্শনের জন্য স্ট্রিং বা যে কোনও কারণের প্রয়োজন হয়, আপনি তার c_str()
পদ্ধতিটি করতে পারেন যা আপনাকে শেষে নাল টার্মিনেটরের সাথে স্ট্রিং দেয়।