وينبغي أن يكون هذا الحرف غير الموقعة؟
-
06-07-2019 - |
سؤال
ولقد وجدت بعض الرموز مربكة خلال مراجعة التعليمات البرمجية، وأنا في حيرة قليلا. القيام ببعض الأبحاث وجدت هذه الحالة. كتبت هذه العينة من التعليمات البرمجية لتسليط الضوء على مشكلة
char d = '©';// this is -87,the copyright symbol , (actually its 169 unsigned)
if(ispunct(d)) // will assert.
{
}
وهكذا، والمبرمج الذي كان إصلاح الخلل، فعل التالي:
char d = '©';// this is -87,the copyright symbol , (actually its 169 unsigned)
if(ispunct((unsigned char)d)) // will not assert, because it will be 169.
{
}
وسؤالي هو ما إذا كان على ما يرام لجعل char
غير موقعة؟ من الناحية المثالية، أنا لن تستخدم char
لكن استخدام شار يونيكود لتجنب هذا النوع من المشكلة، ولكن هذا البرنامج هو قديم جدا ولن يكون صياغتها في أي وقت قريب.
وأنا باستخدام Visual Studio 2008. ispunct()
يمكن العثور عليها في ctype.h
.
المحلول
ويلقي هو الصحيح في هذه الحالة. من man ispunct
:
والاختبارات وظيفة ispunct()
عن أي حرف الطباعة باستثناء الفضاء
(' '
) أو حرف الذي تم isalnum(3)
true
. قيمة
يجب أن يكون حجة للتمثيل بوصفه unsigned char
أو قيمة EOF
.
نصائح أخرى
إذا كنت تريد استخدام ispunct
، ثم ليس هناك طريقة من حوله.
_ASSERTE((unsigned)(c + 1) <= 256);
وهذا ما تسبب في تأكيد أن تفشل، وبالتالي يلقي المناسب.
وانها مشروعة تماما للقيام المدلى بها. وأعتقد في وقعه الافتراضي المتغيرات C ولكن يلقي يجعلها صالحة للاستعمال.