C-তে স্ট্রিং হলো ক্যারেক্টার অ্যারে যার শেষে একটি নাল ক্যারেক্টার ('\0' বা 0) থাকে। এটি স্ট্রিংয়ের শেষ বোঝাতে কাজ করে। C++-তে std::string এটি আরও উন্নত করেছে (সাইজ স্টোর করে, নাল টার্মিনেটর ও রাখে)।
নাল-টার্মিনেটেড স্ট্রিং
- ক্যারেক্টার সিকোয়েন্স + শেষে
'\0'। - ডাবল কোটে লিখলে (
"text") কম্পাইলার অটোমেটিক'\0'যোগ করে। - সাইজ = ক্যারেক্টার কাউন্ট + ১ (নালের জন্য)।
strlen()নাল পাওয়া পর্যন্ত কাউন্ট করে।
উদাহরণ: মাঝপথে নাল ক্যারেক্টার
#include <iostream>
#include <string>
using namespace std;
int main() {
string my_string = "This is a sample text";
cout << my_string << endl; // পুরো প্রিন্ট
my_string = "This is a sam\0ple text"; // মাঝপথে \0
cout << my_string; // "This is a sam" পর্যন্ত প্রিন্ট হবে
return 0;
}
আউটপুট
This is a sample text This is a sam
C-স্টাইল vs C++ std::string
| বিষয় | C-স্টাইল (char[]) | C++ std::string |
|---|---|---|
| নাল টার্মিনেটর | বাধ্যতামূলক | রাখে (c_str() দিয়ে), কিন্তু সাইজ আলাদা ট্র্যাক করে |
| লেথ জানা | O(n) - strlen() | O(1) - size() |
| বাফার ওভারফ্লো রিস্ক | উচ্চ (strcpy, strcat) | নিম্ন (বাউন্ড চেক, এক্সপেন্ডেবল) |
| এমবেডেড নাল | সম্ভব নয় (স্ট্রিং এন্ড মনে হয়) | সম্ভব (size() জানা থাকে) |
সেরা অনুশীলন: আধুনিক C++-এ std::string বা std::string_view ব্যবহার করুন। C API কল করার সময় .c_str() দিয়ে নাল-টার্মিনেটেড পয়েন্টার পান।