Heim  >  Artikel  >  Backend-Entwicklung  >  Warum schlägt die C-Funktion system() fehl, wenn Parameter Leerzeichen enthalten?

Warum schlägt die C-Funktion system() fehl, wenn Parameter Leerzeichen enthalten?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 06:34:02472Durchsuche

Why does the C   system() function fail when parameters contain spaces?

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!

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