سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لماذا أريد أن أتصل 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());
    }

لذلك يعودون نفس الشيء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top