ما معنى تحذير دول مجلس التعاون الخليجي "قيمة تسمية الحالة تتجاوز الحد الأقصى لقيمة النوع"؟

StackOverflow https://stackoverflow.com/questions/1010966

سؤال

الكود الخاص بي يبدو كالتالي:

char * decode_input(char ch)
{
        switch(ch) {
                case 'g':
                        return "get";
                        break;
                case KEY_F(9):
                        return "quit";
                        break;
                default:
                        return "unknown";
                        break;
        }
}

أي أدلة؟

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

المحلول

الحرف هو رقم يقع بين -128 و127.من المحتمل أن تكون KEY_F(9) قيمة خارج هذا النطاق.

يستخدم:

  • حرف غير موقع، أو
  • كثافة العمليات، أو
  • (شار) KEY_F(9)

أو من الأفضل استخدام مصحح الأخطاء وتحديد sizeof(KEY_F(9)) للتأكد من أنها بايت وليست قصيرة.

نصائح أخرى

حسنا، KEY_F (9) سيكون 273 (انظر curses.h) وهو ما يتجاوز مجموعة من شار (-128127).

في هذه الحالة، KEY_F(9) هو تقييم إلى شيء خارج نطاق char. البيان switch وعلى افتراض أن لحجتها هي char، أن جميع تسميات الحالة سوف يكون أيضا. وتغيير switch لقراءة switch((unsigned int)ch) علاجه.

ويبدو KEY_F (9) يجب تقييم إلى ما هو خارج نطاق شار.

وماذا الجميع قال بشأن النطاق لشار.

وأتذكر هذا من أوائل أيامي كتابة C ... ربما كنت تدعو decode_input من حلقة، أليس كذلك؟ إذا كان المستخدم بالضغط شيء من هذا القبيل F9، وأنت ذاهب للحصول على وحدتي بايت في المخزن المؤقت لوحة المفاتيح -. وسوف يكون البايت الأول 0x0

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