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.
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.
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.
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.
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\"\"");
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