Maison >développement back-end >C++ >Comment gérer les espaces dans les paramètres lors de l'utilisation de la fonction C `system()` ?

Comment gérer les espaces dans les paramètres lors de l'utilisation de la fonction C `system()` ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 05:12:02293parcourir

How to Handle Spaces in Parameters When Using the C   `system()` Function?

Fonction C system() et gestion des espaces de paramètres

Lors de l'exécution d'un programme utilisant la fonction system() en C, il est essentiel de faites attention aux espaces dans les paramètres de commande et d’argument. Si des espaces sont présents à la fois dans le chemin de l'exécutable et dans le chemin des paramètres, cela peut entraîner une erreur.

Dans le code fourni :

<code class="cpp">system("\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"");</code>

L'erreur "Le nom du fichier, le nom du répertoire, ou la syntaxe du label de volume est incorrecte" se produit car la commande system() reconnaît la chaîne entière comme nom de l'exécutable en raison du chemin sans guillemets. Pour remédier à cela, citez l'intégralité de la chaîne de commande comme suit :

<code class="cpp">system("\"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>

De plus, comprendre le comportement de la fonction system() dans Windows est crucial. Il appelle les commandes utilisant "cmd /C" par défaut, qui traite les guillemets selon les règles suivantes :

  • Les guillemets sont conservés si la ligne commence et se termine par des guillemets, aucun commutateur /S n'est spécifié et le texte cité est un nom de fichier exécutable.
  • Sinon, si seul le premier caractère est cité, le guillemet d'ouverture est supprimé et le guillemet de fermeture est supprimé de la fin de la ligne, préservant ainsi tout texte ultérieur.

Dans l'exemple donné, la première règle n'est pas respectée, donc la fonction system() interprète "C:UsersAdamDesktoppdftotext" -layout "C:UsersAdamDesktopweek 4.pdf" comme nom de l'exécutable, ce qui entraîne le erreur.

Pour garantir un traitement correct des commandes, il est conseillé de mettre entre guillemets la chaîne entière avec des guillemets doubles et éventuellement d'ajouter le commutateur /S pour être complet :

<code class="cpp">system("cmd /S /C \"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn