ما الفرق بين std::string::c_str وstd::string::data؟[ينسخ]
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
- سلسلة c_str () مقابل.بيانات() 6 إجابات
لماذا أريد أن أتصل std::string::data()
زيادة std::string::c_str()
؟من المؤكد أن هناك طريقة ما لجنون المعيار هنا ...
المحلول
يضمن c_str() إنهاء NUL.البيانات () لا.
نصائح أخرى
تقوم c_str() بإرجاع مؤشر إلى البيانات مع إضافة بايت NUL حتى تتمكن من استخدام القيمة المرجعة كـ "سلسلة C".
data() تقوم بإرجاع مؤشر إلى البيانات دون أي تعديلات.
استخدم c_str() إذا كان الكود الذي تستخدمه يفترض أن السلسلة منتهية بـ NUL (مثل أي دالة مكتوبة للتعامل مع سلاسل C).
الآن في MS STL 10.0 لا يبدو أن هناك أي فرق، كما أرى هذا في الرأس:
...\Microsoft Visual Studio 10.0\VC\include\xstring
const _Elem *c_str() const
{ // return pointer to null-terminated nonmutable array
return (_Myptr());
}
const _Elem *data() const
{ // return pointer to nonmutable array
return (c_str());
}
لذلك يعودون نفس الشيء.
لا تنتمي إلى StackOverflow