عند استدعاء تطبيقات خارجية من خلال System () في لغة C، من الضروري ضمان المعالجة السليمة للوسائط التي تحتوي على مسافات. إذا كان كل من المسار القابل للتنفيذ والوسيطة يحتويان على مسافات، فقد ينشأ خطأ.
يقوم النظام () بشكل أساسي بتنفيذ الأمر المحدد باستخدام cmd /C. عند معالجة سطر الأوامر، يتبع cmd قواعد معينة تتعلق بأحرف الاقتباس. افتراضيًا، يقوم بإزالة علامات الاقتباس البادئة والزائدة، مع التعامل مع السلسلة المتبقية كاسم قابل للتنفيذ.
لحل هذه المشكلة، يجب تضمين الأمر في مجموعة إضافية من علامات الاقتباس المزدوجة:
system("\"\""CMD\"" \""ARG1\"" \""ARG2\"\"");
هذه الإضافية يضمن مستوى الاقتباس أن cmd يفسر كل وسيطة بشكل صحيح، بغض النظر عن وجود مسافات.
يتضمن النهج البديل استخدام ملف دفعي لتنفيذ الأمر باستخدام الوسائط المطلوبة يمكن إنشاء ملف دفعي بالمحتويات التالية:
cd PATH_TO_DIR EXECUTABLE_NAME ARG1 ARG2
من خلال استدعاء system() باستخدام اسم الملف الدفعي هذا كوسيطة، سيتم تنفيذ الأمر على النحو المنشود، حتى مع الوسائط التي تحتوي على مسافات.
لضمان التوافق مع بيئات مختلفة وتطبيقات shell، يوصى بتضمين رمز التبديل /S عند استخدام النظام (). يفرض رمز التبديل هذا على cmd تحليل سطر الأوامر بشكل صارم استنادًا إلى الحالة 2 كما هو موضح في وثائق cmd.
مثال:
system("cmd /S /C \"\""CMD\"" \""ARG1\"" \""ARG2\"\"");
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3