Heim  >  Artikel  >  Backend-Entwicklung  >  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()?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-02 13:45:30670Durchsuche

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:

<code class="cpp">system("\"\""CMD\"" \""ARG1\"" \""ARG2\"\"");</code>

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

Alternativer Ansatz

Ein alternativer Ansatz beinhaltet Verwenden einer Batchdatei, um den Befehl mit den gewünschten Argumenten auszuführen. Die Batchdatei 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 vorgesehen ausgeführt, auch wenn Argumente Leerzeichen enthalten.

Zusätzliche Überlegungen

Um die Kompatibilität mit verschiedenen Umgebungen und Shell-Implementierungen sicherzustellen, wird empfohlen, bei der 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:

<code class="cpp">system("cmd /S /C \"\""CMD\"" \""ARG1\"" \""ARG2\"\"");</code>

Das obige ist der detaillierte Inhalt vonWie führe ich externe Anwendungen mit Argumenten aus, die Leerzeichen enthalten, mit C system()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn