


Warum schlägt die C-Funktion system() fehl, wenn Parameter Leerzeichen enthalten?
Oct 28, 2024 am 06:34 AMC 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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
