هل من الممكن أن تتحرك إلى الوراء من خلال قائمة حجة جيتوبت_لونغ?

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

  •  16-09-2020
  •  | 
  •  

سؤال

أود التفويض إلى واحدة من عدة قوائم محتملة للحجج بناء على ما إذا كانت هناك حجج معينة موجودة ، على غرار:

./test --do-thing-1 --option-A=7 --common-option --option-B=2 # options C and D not valid
./test --do-thing-2 --option-C=9 --common-option --option-D=1 # options A and B not valid

وأفضل طريقة يمكن أن أفكر في القيام بذلك بدقة هو أن يكون main() معالجة جميع الخيارات المشتركة ، وتقرر أي من عدة وظائف لاستدعاء لمعالجة ما تبقى.

لاحظ أنني لا أريد تقييد الطلب بحيث لا يمكن أن تحدث الخيارات الشائعة إلا أولا.

مشكلتي هي أنه إذا كنت إعادة تعيين optind إلى 1 قبل تحليل الحجج للمرة الثانية, getopt_long سيغفاولتس عن طريق تمرير سلسلة غير صالحة إلى strncmp - لذا أعتقد أنني لا يجب أن أعبث مع أوبتيند.

لقد كان جوجل ، ولا يمكن العثور على أي إشارة على ما إذا كان من الممكن للقفز حول getopt_long قائمة حجة (وأنا أعلم أنه من الممكن ل getopt), إذا كان, كيف أفعل ذلك?

أفضل عدم استخدام أي مكتبات غير قياسية.(اللغة واضحة ج ، لا ج please من فضلك)

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

المحلول

كانت مشكلتي أنني لم تعيين الصف الأخير من بلدي static struct option long_options[] الصفيف إلى الأصفار ، يؤدي تعيين هذا إلى إصلاح الخطأ بشكل صحيح.

يتطلب جنو جيتوبت أيضا optind لإعادة التعيين إلى 0 وليس 1 من أجل إعادة تعيين حالته الداخلية بشكل صحيح.

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