سؤال

أحاول تحويل التعليمات البرمجية التالية من MSVC إلى دول مجلس التعاون الخليجي

 # Define LTolower (Ch) Charlower ((LPSTR) (UCHAR) (CH)) Char * GEL؛ * الفصول = (char) ltolower (* الفصول)؛ 

يعطي هذا الرمز خطأ مترجم: يلقي من "char *" إلى "Char" يفقد الدقة

فهمي هو أن أسطوائي (int) من C لن يحول السلسلة بأكملها. شكرا.

هل كانت مفيدة؟

المحلول

يلقي الخاص بك في شارلور هو رفع هذا الخطأ. قبل القيام بذلك، تحتاج إلى تعيين بايت الترتيب العالي من المؤشر المري شارلور يساوي الصفر.

من مرجع MSDN على الوظيفة:

إذا كانت المعامل سلسلة أحرف، فإن الدالة ترجع مؤشر إلى السلسلة المحولة. نظرا لأن السلسلة يتم تحويلها في مكانها، فإن قيمة الإرجاع تساوي LPSZ.

إذا كانت المعامل شخصية واحدة، فستكون قيمة الإرجاع قيمة 32 بت من كلمة ترتيبها عالية الصفر، ويحتوي كلمة منخفضة الترتيب على الحرف المحول.

شيء مثل هذا قد يعمل:

#define ltolower(ch) CharLower(0x00ff & ch)

إذا كنت تستخدم مترجم C ++، فقد تحتاج أيضا إلى مشغل يلقي:

#define ltolower(ch) CharLower((LPTSTR)(0x00ff & ch))

لم يختبرها على الرغم من ...

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