القائمة الرئيسية

الصفحات

C - Command Line Arguments

 من الممكن تمرير بعض القيم من سطر الأوامر إلى برامج سي عند تنفيذها. تسمى هذه القيم وسائط سطر الأوامر وهي مهمة في كثير من الأحيان لبرنامجك خاصة عندما تريد التحكم في برنامجك من الخارج بدلاً من ترميز هذه القيم داخل الكود.

يتم التعامل مع وسيطات سطر الأوامر باستخدام وسيطات الدالة 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
الصفحة التالية                                                                                    الصفحة السابقة  
هل اعجبك الموضوع :

تعليقات