C system()-Funktionsstörungen aufgrund von Leerzeichen in Parametern
Bei Verwendung der system()-Funktion in C, um ein Programm mit Parametern auszuführen Wenn es Leerzeichen enthält, kann es zu einem Fehler bezüglich der Syntax des Dateinamens, Verzeichnisnamens oder der Datenträgerbezeichnung kommen. Dieses Problem tritt auf, wenn sowohl der Pfad der ausführbaren Datei als auch der Pfad der Parameterdatei Leerzeichen enthalten.
Zum Beispiel:
<code class="cpp">#include <stdlib.h> #include <conio.h> int main() { system("\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\""); _getch(); }</code>
In diesem Code versucht die Funktion system(), die Funktion „pdftotext“ auszuführen. ausführbar mit zwei Parametern. Allerdings löst das Vorhandensein von Leerzeichen sowohl im ausführbaren Pfad als auch im Parameterpfad den Fehler aus.
Ursache des Problems
Die Funktion system() übergibt ihre Argumente an der Befehl cmd /k, der die Argumente nach bestimmten Regeln interpretiert. Eine dieser Regeln besagt, dass die Anführungszeichen erhalten bleiben, wenn die Befehlszeile genau zwei Anführungszeichen enthält, keine Sonderzeichen zwischen den Anführungszeichen und die Zeichenfolge der Name einer ausführbaren Datei ist.
Allerdings in Im Beispielcode enthält die Zeichenfolge zwischen den Anführungszeichen ein Leerzeichen, was gegen die Regel verstößt. Folglich interpretiert der Befehl cmd /k die Zeichenfolge als ungültigen ausführbaren Namen und erzeugt den Fehler.
Lösung
Um dieses Problem zu beheben, schließen Sie den gesamten Befehl in „Zusatz“ ein Anführungszeichen:
<code class="cpp">system("\"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>
Dadurch wird sichergestellt, dass die gesamte Befehlszeichenfolge als ein Argument analysiert wird, wodurch verhindert wird, dass der Befehl cmd /k sie falsch interpretiert.
Zusätzlich wird sichergestellt, dass die Zeichenfolge immer analysiert wird Gemäß der richtigen Regel können Sie den /S-Schalter einschließen:
<code class="cpp">system("cmd /S /C \"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>
Das obige ist der detaillierte Inhalt vonWarum schlägt die C-Funktion system() fehl, wenn Parameter Leerzeichen enthalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!