„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie führe ich externe Anwendungen mit Argumenten aus, die Leerzeichen enthalten, mit C++ system()?

Wie führe ich externe Anwendungen mit Argumenten aus, die Leerzeichen enthalten, mit C++ system()?

Veröffentlicht am 08.11.2024
Durchsuche:166

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

C system()-Aufruf schlägt fehl, wenn mehrere Argumente Leerzeichen enthalten

Beim Aufrufen externer Anwendungen über system() in C ist es wichtig, die ordnungsgemäße Behandlung von Argumenten sicherzustellen enthalten Leerzeichen. Wenn sowohl der ausführbare Pfad als auch ein Argument Leerzeichen enthalten, kann ein Fehler auftreten.

Zugrundeliegender Fehlermechanismus

system() führt im Wesentlichen den angegebenen Befehl mit cmd /C aus. Bei der Verarbeitung der Befehlszeile beachtet cmd bestimmte Regeln bezüglich Anführungszeichen. Standardmäßig werden die führenden und nachgestellten Anführungszeichen entfernt und die verbleibende Zeichenfolge als Name einer ausführbaren Datei behandelt.

Beheben des Fehlers

Um dieses Problem zu beheben, muss der Befehl in einen zusätzlichen Satz von eingeschlossen werden doppelte Anführungszeichen:

system("\"\""CMD\"" \""ARG1\"" \""ARG2\"\"");

Diese zusätzliche Ebene der Anführungszeichen stellt sicher, dass cmd jedes Argument korrekt interpretiert, unabhängig vom Vorhandensein von Leerzeichen.

Alternativer Ansatz

Ein alternativer Ansatz besteht darin, eine Batch-Datei zu verwenden, um den Befehl mit den gewünschten Argumenten auszuführen. Die Batch-Datei kann mit folgendem Inhalt erstellt werden:

cd PATH_TO_DIR
EXECUTABLE_NAME ARG1 ARG2

Durch den Aufruf von system() mit diesem Batchdateinamen als Argument wird der Befehl wie beabsichtigt ausgeführt, auch wenn Argumente Leerzeichen enthalten.

Zusätzliche Überlegungen

Um die Kompatibilität mit verschiedenen Umgebungen und Shell-Implementierungen sicherzustellen, wird empfohlen, bei Verwendung von system() den Schalter /S einzubeziehen. Dieser Schalter zwingt cmd, die Befehlszeile streng auf der Grundlage von Fall 2 zu analysieren, wie in der cmd-Dokumentation beschrieben.

Beispiel:

system("cmd /S /C \"\""CMD\"" \""ARG1\"" \""ARG2\"\"");
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3