"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تنفيذ التطبيقات الخارجية باستخدام الوسائط التي تحتوي على مسافات باستخدام نظام C++ ()؟

كيفية تنفيذ التطبيقات الخارجية باستخدام الوسائط التي تحتوي على مسافات باستخدام نظام C++ ()؟

تم النشر بتاريخ 2024-11-08
تصفح:425

How to Execute External Applications with Arguments Containing Spaces Using C   system()?

فشل استدعاء نظام C () مع وسيطات متعددة تحتوي على مسافات

عند استدعاء تطبيقات خارجية من خلال 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