এমনকি আপনি কীভাবে দেখেছেন যে তারা একই কাজ করে বা ড্যাটা () কল করে .c_str () কল করে, এটি অন্য সংকলকগুলির ক্ষেত্রে এটি হবে তা ধরে নেওয়া ঠিক হবে না। এটিও সম্ভব যে আপনার সংকলক ভবিষ্যতের প্রকাশের সাথে পরিবর্তিত হবে।
স্ট্যান্ডিং :: স্ট্রিং ব্যবহারের দুটি কারণ:
std :: স্ট্রিং উভয় পাঠ্য এবং স্বেচ্ছাসেবী বাইনারি তথ্য ব্যবহার করা যেতে পারে।
std::string s1;
s1 = "abc";
std::string s2;
s2.append("a\0b\0b\0", 6);
উদাহরণস্বরূপ 1 হিসাবে আপনি যখন আপনার স্ট্রিংটি ব্যবহার করছেন তখন আপনার .c_str () পদ্ধতিটি ব্যবহার করা উচিত।
উদাহরণস্বরূপ আপনি যখন আপনার স্ট্রিংটি ব্যবহার করছেন তখন আপনার .data () পদ্ধতিটি ব্যবহার করা উচিত these কারণ এই ক্ষেত্রে .c_str () ব্যবহার করা বিপজ্জনক নয়, তবে এটি অন্যদের জন্য পর্যালোচনা করার ক্ষেত্রে বাইনারি ডেটা নিয়ে কাজ করছেন বলে আরও স্পষ্ট because তোমার গোপন সংকেত.
.ডাটা () ব্যবহার করে সম্ভাব্য সমস্যা
নিম্নলিখিত কোডটি ভুল এবং আপনার প্রোগ্রামে সেগফ্ল্টের কারণ হতে পারে:
std::string s;
s = "abc";
char sz[512];
strcpy(sz, s.data());
প্রয়োগকারীরা .ডাটা () এবং .c_str () একই জিনিস করা কেন সাধারণ?
কারণ এটি করা আরও দক্ষ। .Data () এমন কিছু ফেরত দেওয়ার একমাত্র উপায় যা বাতিল হওয়া নয়, এটি হবে .c_str () বা .data () এর অভ্যন্তরীণ বাফারটি অনুলিপি করা, বা কেবল 2 টি বাফার ব্যবহার করা। একক নাল টার্মিনেটেড বাফার থাকার অর্থ সর্বদা স্ট্যান্ড :: স্ট্রিং বাস্তবায়নের সময় আপনি কেবলমাত্র একটি অভ্যন্তরীণ বাফার ব্যবহার করতে পারেন।
.data()
, তাই তারা আর অ-ধ্রুব স্ট্রিংগুলির সমতুল্য নয়।