C# - ماذا يساوي " 0"؟
-
21-09-2019 - |
سؤال
أنا ألعب مع PEX وواحدة من المعلمات التي تنتقل إلى طريقتي هي "\0"
.
ماذا يعني ذالك؟ تخميني سلسلة فارغة (""
) بناءً على محتوى طريقتي. ومع ذلك ، إذا كان الأمر هو نفسه فلماذا لا تستخدم فقط ""
بدلاً من "\0"
?
أحد يعرف ما هو عليه؟
المحلول
" 0" هو "شخصية فارغة". يتم استخدامه لإنهاء السلاسل في C وبعض أجزاء من C ++. تقوم PEX بإجراء اختبار لمعرفة كيفية تعامل الكود الخاص بك مع الحرف الفارغ ، على الأرجح يبحث عن سم بايت لاغية استغلال الأمن.
معظم C# رمز ليس لديه ما يخشاه ؛ إذا قمت بتمرير السلسلة إلى الكود غير المدير ، فقد تواجه مشاكل.
تعديل:
فقط لكي تكون صريحًا ... PEX تمر سلسلة تحتوي على حرف فارغ. هذا هو ليس مرجع فارغ.
نصائح أخرى
إنها سلسلة تحتوي على الحرف " 0". لا يعامل C# هذا بأي طريقة خاصة بشكل خاص - إنه مجرد حرف Unicode U+0000. إذا كتبت:
int firstCodePoint = text[0];
ثم ستجد firstCodePoint
هو 0.
إنها سلسلة ذات حرف فارغ. تستخدم مكتبات السلسلة الأقدم - مثل تلك المستخدمة في C أو Order C ++ Libraries - حرف " 0" للإشارة إلى نهاية السلسلة.
تستخدم البيئات الأحدث مثل .NET نظامًا مختلفًا ، ولكن هناك الكثير من التاريخ حول إنهاء سلسلة مع " 0" ، بحيث تكون نقطة خطأ شائعة. سيستخدمها اختبار المكتبات مثل PEX للتأكد من أن البرنامج يعالجها بشكل صحيح.
سلسلة من الطول 1 ، تحتوي على الحرف u0000 (ويعرف أيضًا باسم NUL). لا يتم التعامل مع هذه الشخصية بشكل خاص.
في C ، الذي يستخدم 0 لإنهاء السلسلة ، يمكنك أيضًا تخصيص سلسلة من الطول 1. في هذه الحالة ، ستقوم وظائف السلسلة القياسية بالإبلاغ عن طول 0 ، نظرًا لأن السلسلة تحتوي على 0 بالإضافة إلى إنهاءها. يمكنك تعديل STR [0] بأمان ، أو strncat حرف واحد فيه.
Escape Sequence
\0
Character Name
Null
Unicode Encoding
0x0000