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

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

Oct 28, 2024 am 06:34 AM

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 &lt;stdlib.h&gt;
#include &lt;conio.h&gt;

int main() {
    system("\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"");
    _getch();
}</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Erklärung dieser Website
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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte Mar 03, 2025 pm 05:53 PM

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

GULC: C -Bibliothek von Grund auf neu gebaut GULC: C -Bibliothek von Grund auf neu gebaut Mar 03, 2025 pm 05:46 PM

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert? Mar 03, 2025 pm 05:52 PM

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

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)? Mar 12, 2025 pm 04:50 PM

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

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die? Mar 03, 2025 pm 05:53 PM

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

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Wo ist der Rückgabewert der C -Sprachfunktion im Speicher? Mar 03, 2025 pm 05:51 PM

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

eindeutiger Gebrauch und Phrasenfreigabe eindeutiger Gebrauch und Phrasenfreigabe Mar 03, 2025 pm 05:51 PM

eindeutiger Gebrauch und Phrasenfreigabe

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient? Mar 12, 2025 pm 04:52 PM

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

See all articles