سؤال

ولقد وجدت بعض الرموز مربكة خلال مراجعة التعليمات البرمجية، وأنا في حيرة قليلا. القيام ببعض الأبحاث وجدت هذه الحالة. كتبت هذه العينة من التعليمات البرمجية لتسليط الضوء على مشكلة

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 ولكن يلقي يجعلها صالحة للاستعمال.

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