من الممكن تمرير بعض القيم من سطر الأوامر إلى برامج سي عند تنفيذها. تسمى هذه القيم وسائط سطر الأوامر وهي مهمة في كثير من الأحيان لبرنامجك خاصة عندما تريد التحكم في برنامجك من الخارج بدلاً من ترميز هذه القيم داخل الكود.
يتم التعامل مع وسيطات سطر الأوامر باستخدام وسيطات الدالة main () حيث تشير argc إلى عدد الوسائط التي تم تمريرها ، بينما تشير argv [] إلى مصفوفة مؤشر تشير إلى كل وسيطة تم تمريرها إلى البرنامج. فيما يلي مثال بسيط يتحقق مما إذا كانت هناك أي حجة يتم توفيرها من سطر الأوامر واتخاذ الإجراءات وفقًا لذلك -
#include <stdio.h> int main( int argc, char *argv[] ) { if( argc == 2 ) { printf("The argument supplied is %s\n", argv[1]); } else if( argc > 2 ) { printf("Too many arguments supplied.\n"); } else { printf("One argument expected.\n"); } }
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها باستخدام وسيطة واحدة ، فإنها تنتج النتيجة التالية.
$./a.out testing The argument supplied is testing
عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها مع وسيطتين ، فإنها تنتج النتيجة التالية.
$./a.out testing1 testing2 Too many arguments supplied.
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها دون تمرير أي وسيطة ، فإنها تنتج النتيجة التالية.
$./a.out One argument expected
وتجدر الإشارة إلى أن argv [0] يحمل اسم البرنامج نفسه و argv [1] هو مؤشر إلى وسيطة سطر الأوامر الأولى المقدمة ، و * argv [n] هي الوسيطة الأخيرة. إذا لم يتم توفير وسيطات ، فستكون argc واحدة ، وإذا مررت وسيطة واحدة ، فسيتم تعيين argc على 2.
يمكنك تمرير جميع وسائط سطر الأوامر مفصولة بمسافة ، ولكن إذا كانت الوسيطة نفسها تحتوي على مسافة ، فيمكنك تمرير هذه الوسائط بوضعها داخل علامتي اقتباس مزدوجتين "" أو علامات اقتباس مفردة ". دعنا نعيد كتابة المثال أعلاه مرة أخرى حيث سنطبع اسم البرنامج ونمرر أيضًا وسيطة سطر الأوامر عن طريق وضع علامات اقتباس مزدوجة داخل -
#include <stdio.h> int main( int argc, char *argv[] ) { printf("Program name %s\n", argv[0]); if( argc == 2 ) { printf("The argument supplied is %s\n", argv[1]); } else if( argc > 2 ) { printf("Too many arguments supplied.\n"); } else { printf("One argument expected.\n"); } }
عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها باستخدام وسيطة واحدة مفصولة بمسافة ولكن داخل علامات اقتباس مزدوجة ، فإنها تنتج النتيجة التالية.
$./a.out "testing1 testing2" Progranm name ./a.out The argument supplied is testing1 testing2
تعليقات
إرسال تعليق