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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 15:27:26637parcourir

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

Erreur de fonction C system() avec des espaces dans les paramètres

Énoncé du problème

Lors de l'utilisation de la fonction system() en C pour exécuter un exécutable avec paramètres, une erreur se produit s'il y a des espaces à la fois dans le chemin de l'exécutable et dans le chemin d'un fichier passé en paramètre. Le message d'erreur se lit comme suit :

The filename, directory name, or volume label syntax is incorrect.

Explication

La fonction system() exécute les commandes système en les transmettant au processeur de commandes Windows (cmd). Lorsque la commande contient des espaces, le processeur de commandes interprète tout ce qui se trouve entre les premier et dernier guillemets comme un argument unique. Cependant, dans ce cas, les guillemets doubles autour du chemin de l'exécutable et les guillemets doubles autour du chemin du fichier de paramètres provoquent un conflit.

Solution

Pour résoudre le problème, un jeu supplémentaire de doubles des guillemets doivent être ajoutés pour entourer l’intégralité de la commande. De cette façon, le processeur de commandes traite tout ce qui se trouve entre ces guillemets les plus externes comme un seul argument, même s'il contient des espaces et d'autres guillemets doubles.

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

Notes supplémentaires

  • Le cmd Des indicateurs /S /C peuvent être ajoutés à l'appel de fonction system() pour garantir que la chaîne est toujours analysée comme un scénario du cas 2, où les guillemets doubles sont traités comme faisant partie de l'argument.
<code class="cpp">system("cmd /S /C \"\"D:\test\" nospaces \"text with spaces\"\"");</code>
  • L'utilisation de ce mécanisme de citation permet d'éviter l'erreur provoquée par les espaces dans les chemins de l'exécutable et des paramètres.

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