argv و argc به چه دردی می خورن ؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

argv و argc به چه دردی می خورن ؟

+4 امتیاز

من وقت توی ویژوال استودیو یک پروژه C++ میسازم بصورت خودکار 2 تا متغیرargc و argv میزاره داخل main برنامه کار این 2 تا چیه ؟!

سوال شده آذر 3, 1392  بوسیله ی 13mody (امتیاز 256)   8 36 54
دوباره تگ گذاری شد فروردین 7, 1393 بوسیله ی BlueBlade
البته برای برنامه‌های لینوکس بیش تر به درد می‌خورن چون اون جا برنامه‌های terminal زیاده و همه‌ این برنامه ‌ها آرگومان می‌خوان تا بدونن چیکار کنن.

3 پاسخ

+6 امتیاز
 
بهترین پاسخ

وقتیکه برنامه شما اجرا میشه به صورت پیش فرض یک پارامتر داره و آن هم نام برنامه شماست.یعنی argc=1 و argv[0]="program path"

یک مثال کاربردی میزنم براتون.شما یک برنامه پردازش تصویر نوشتید که در حالت عادی برنامه با web cam کار می کنه و در حالت دیگر کاربر می تونه بجای اینکه capture رو از وب کم داشته باشه می تونه capture رو از فایل بگیره که در این صورت بایستی نام فایل رو مشخص کنه.

EcvCapture capture;
if (argc == 1)
  capture.captureFromCamera(0);
else if (argc == 2)
capture.captureFromFile(argv[1]);

 

 

پاسخ داده شده آذر 3, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد آذر 3, 1392 بوسیله ی 13mody
+6 امتیاز
int main(int argc, char** argv)

این 2 تا متغیر برای اجرای برنامه از طریق خط فرمان استفاده میشن .

argv یک ارایست که محل اجرای فایل و مقادیر ورودی رو نگه میداره .

تعداد پارامتر های ورودی یا اندازه argv هم در argc ذخیره میشه .

پاسخ داده شده آذر 3, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
ویرایش شده آذر 3, 1392 بوسیله ی مصطفی ساتکی
+2 امتیاز
یه مثال واضحتر اینکه شما دستور dir /p رو تو کامند میدونین که این p/ پارامتری هستش که به دستور dir فرستاده میشه این همون argv و اسم برنامه که dir هستش همون argc هستش. اینطوری مینونین برنامه هایی بنویسید که بشه بهشون پارامتر فرستاد . البته تو سیستم عامل هم وقتی که شما یه برنامه یا فایل مثلا doc. رو روی برنامه office میندازید همین اتفاق می افته آفیس با پارامتر که اسم فایل به همراه مسیرش هست رو میتونه به راحتی باز کنه و نیازی به باز کردن اون بعد از اجرای آفیس نیست.
پاسخ داده شده مرداد 17, 1393 بوسیله ی tux-world (امتیاز 137)   1 1 6
...