Dysfonctionnements de la fonction C system() en raison d'espaces dans les paramètres
Lors de l'utilisation de la fonction system() en C pour exécuter un programme avec des paramètres contenant des espaces, cela peut entraîner une erreur concernant la syntaxe incorrecte du nom de fichier, du nom de répertoire ou du nom de volume. Ce problème survient lorsque le chemin de l'exécutable et le chemin du fichier de paramètres contiennent des espaces.
Par exemple :
<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>
Dans ce code, la fonction system() tente d'exécuter le "pdftotext" exécutable avec deux paramètres. Cependant, la présence d'espaces à la fois dans le chemin de l'exécutable et dans le chemin des paramètres déclenche l'erreur.
Cause du problème
La fonction system() transmet ses arguments à la commande cmd /k, qui interprète les arguments selon des règles précises. L'une de ces règles stipule que si la ligne de commande contient exactement deux guillemets, aucun caractère spécial entre les guillemets et que la chaîne est le nom d'un fichier exécutable, alors les guillemets sont conservés.
Cependant, dans Dans l'exemple de code, la chaîne entre les guillemets contient un espace, violant la règle. Par conséquent, la commande cmd /k interprète la chaîne comme un nom d'exécutable non valide et génère l'erreur.
Solution
Pour résoudre ce problème, joignez l'intégralité de la commande dans des citations :
<code class="cpp">system("\"\"C:\Users\Adam\Desktop\pdftotext\" -layout \"C:\Users\Adam\Desktop\week 4.pdf\"\"");</code>
Cela garantit que la chaîne de commande entière est analysée comme un seul argument, empêchant la commande cmd /k de l'interpréter mal.
De plus, pour garantir que la chaîne est toujours analysée selon la règle correcte, vous pouvez inclure le commutateur /S :
<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!