سؤال

تجميع مع دول مجلس التعاون الخليجي C99

أنا أحاول أن أقارن 2 سلسلة باستخدام سلسلة مقارنة.ومع ذلك, لا يبدو أن يكون الحصول على تفريغ المكدس على strcmp خط.

**السمة سوف تحتوي على هذه ، لذلك أنا أبحث عن frametype.

[name] [time] [type] [time]
[name] [callref] [type] [string]
[name] [port] [type] [int16]
[name] [frametype] [type] [int16]

هل هذه الطريقة الصحيحة مقارنة.

شكرا جزيلا على أي اقتراحات ،

void g_start_element(void *data, const char *element, const char **attribute)
{
    for(i = 0; attribute[i]; i++)
    {
    /* Only interested in the frametype */
        if(strcmp(attribute[i], "frametype") == 0)
        {
            /* do some work here */
        }

     }
}

نصائح أخرى

وأنت بحاجة إلى سلسلة فارغة من أجل إنهاء للحلقة:

[name] [time] [type] [time]
[name] [callref] [type] [string]
[name] [port] [type] [int16]
[name] [frametype] [type] [int16]
null

وبدون أن هذه الحلقة for لا تنتهي وسوف ينتهي بك الأمر مع السمة [أنا] لافتا إلى القمامة عند استدعاء strcmp.

  1. كيف هو السمة مجموعة تهيئة?NULL عنصر قد تراجع في.
  2. أيضا عنصر صفيف يجب أن ينتهي مع فارغة.
  3. قد تفكر في استخدام strncmp() كبديل أكثر أمانا strcmp().

هل إدخال مجموعة الخاص بك (attribute) منتهية NULL؟ كنت لا نورد على أنها الحاضر، ولكن يتطلب رمز على خلاف ذلك سيكون مجرد المشي جنبا إلى جنب في الذاكرة العشوائية، وهو سبب وجيه لخطأ التقسيم.

وأدخل الطباعة للمؤشر و / أو السمة يجري مقارنة لمعرفة ما اذا كان يتصرف بالطريقة التي تتوقعها فيما يتعلق بإنهاء.

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

واضافة قطع الأشجار وتفريغ كل الصفات والقيمة مفهرس على طول الطريق. وهذا سوف يساعد تحديد ما يحدث الخطأ.

وراء عدم منتهية، لماذا لا تستخدم strncmp ()؟ :)

وأود أن أضيف الاختيار NULL بحيث يكون لديك

if(attribute[1] != NULL && strcmp("frametype", attribute[1]) == 0)

وحتى لا يتم dereferencing مؤشر NULL.

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