নীচের স্ট্রিংটিতে নাল টার্মিনেটর '\ 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()পদ্ধতিটি করতে পারেন যা আপনাকে শেষে নাল টার্মিনেটরের সাথে স্ট্রিং দেয়।