سؤال

كما كتبت تطبيقا مع وظيفة main(int argc, char * argv[])

عندما أبدأ التطبيق، أريد أن أرسل بعض المعلمات مثل (افترض اسم التطبيق ffdisk)

>ffdisk -f 111123123131321312312123 1

ترى التعاون الثالث ربما INT64 Param في نيتي الأصلية ...
ولكن في الوظيفة الرئيسية، Argv [2] هو مؤشر السلسلة، فكيف يمكن تحويل هذه السلسلة إلى متغير Int64؟

ثناكس ...
أنا دائما عالق في مشاكل فوضوي ....

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

المحلول

يمكنك استخدام وظائف _atoi64، _STRTOI64 في Stdlib.h

نصائح أخرى

هناك طرق متعددة، استخدم بعض مكتبة تحليل Argc / Argv، أو استخدام وظائف مكتبة SSCANF أو ATOL يدويا.

#include <stdlib.h>

int main(int argc, char** argv) {
     second_parm_as_long_long = atoll(argv[2]);
     return 0;
}

كما تستهدف النوافذ ونظام التشغيل Linux، قد ترغب في البقاء جيدا داخل الوظائف الموجودة على كلا النظامين. وهذا يعني عادي قياسي C89.

لكن C89 القياسي العادي لا يتطلب تطبيقات لتوفير نوع عدد صحيح 64 بت. لذلك، أنت عالق على أي حال.

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

value = 0; /* value is of the large enough type */
char *p = argv[2];
while (*p) {
    value *= 10;
    value += *p - '0';
    p++;
}
/* if argv[2] was "111123123131321312312123"
 * and the type is large enough,
 * value now has 111123123131321312312123 */

لينكس، مكتبة جنو ج لديها getopt.. وبعد لنظام التشغيل Windows، يمكنك إلقاء نظرة على xgetopt.

أو يمكنك إلقاء نظرة على جدال (لكنني لم أتحقق من فرصة استخدامها)

أيضا في C ++:

boost.program_option.يسمح بمطوري البرامج للحصول على خيارات البرنامج، أي أزواج (اسم أو قيمة) من المستخدم، عبر الأساليب التقليدية مثل سطر الأوامر وملف التكوين.

أو

ال gflags. تحتوي الحزمة على مكتبة تنفذ معالجة أعلام الأوامر. على هذا النحو إنه بديل لل GetOpt (). لقد زادت المرونة، بما في ذلك الدعم المدمج لأنواع C ++ مثل السلسلة، والقدرة على تحديد العلامات في الملف المصدر الذي تستخدم فيه.

فقط اختيار واحد.

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