هل تقوم سلسلة C 11::c_str() بإزالة الإنهاء الفارغ؟
في C 11، لم تعد السلسلة::c_str مضمونة لـ إنتاج سلسلة منتهية بقيمة خالية.
السبب:
في C 11، يتم تعريف string::c_str على أنها مماثلة لسلسلة::data، والتي بدورها يتم تعريفها يعادل *(begin() n) لـ 0
العواقب:
هذا يعني أن السلسلة::c_str() قد لا تعود بعد الآن سلسلة منتهية بقيمة خالية، مما يؤدي إلى أخطاء محتملة في السيناريوهات التي تفترض مثل هذا الإنهاء.
الحل:
الحل هو استخدام string::c_str() فقط لـ التوافق مع الكود القديم. للحصول على تعليمات برمجية جديدة، استخدم string::data() بدلاً من ذلك. في حين أن string::data() لا تُرجع سلسلة منتهية بقيمة خالية، فإنها تُرجع مؤشرًا إلى المخزن المؤقت الأساسي، والذي يضمن أنه منتهية بقيمة خالية داخليًا.
تفاصيل التنفيذ:
داخليًا، السلاسل مطلوبة الآن لاستخدام المخازن المؤقتة ذات القيمة الخالية. يتطلب تعريف عامل التشغيل[] في القسم 21.4.5 أنه بالنسبة إلى size()
ملاحظات إضافية:
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3