L’étiquette ne peut être utilisée que dans le cadre d’une instruction Error

J’ai parcouru les forums mais je n’ai pas trouvé de réponse à cette question qui concerne ma situation. J’essaie de faire un appel système à l’aide de ‘sort’ (unix), cependant, je reçois une erreur en disant: “une étiquette ne peut faire partie que d’une déclaration et une déclaration n’est pas une déclaration.” Voici le code à l’origine de l’erreur.

int processid; switch(processid = fork()){ //establishing switch statement for forking of processes. case -1: perror("fork()"); exit(EXIT_FAILURE); break; case 0: char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL}; //execv call to sort file for names. break; default: sleep(1); printf("\nChild process has finished."); } 

Dans l’appel système, j’essaie de sortinger un fichier par ordre alphabétique pour simplement rassembler les termes par leur nom.

Je suis tellement abasourdi que l’erreur se produit à un caractère char * const contenant les commandes de mon appel système execv. Cette instruction de commutateur EXACT fonctionne sur un fichier de programme différent. Quelqu’un peut-il repérer ce qui me manque? Merci

En C (opposé à C ++), les déclarations ne sont pas des instructions. Les étiquettes ne peuvent précéder que les déclarations. Vous pouvez écrire par exemple en insérant une instruction null après l’étiquette

 case 0: ; char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL}; //execv call to sort file for names. break; 

Ou vous pouvez joindre le code entre accolades

 case 0: { char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL}; //execv call to sort file for names. break; } 

Tenez compte du fait que dans le premier cas la scope de la variable est l’instruction switch alors que dans le second cas la scope de la variable est le bloc de code interne sous l’étiquette. La variable a une durée de stockage automatique. Donc, il ne sera plus en vie après avoir quitté les blocs de code correspondants.

Lorsque vous définissez une variable sous une étiquette, vous devez indiquer la scope de la variable (en utilisant une accolade).

 int processid; switch(processid = fork()) { //establishing switch statement for forking of processes. case -1: perror("fork()"); exit(0); break; case 0: { char *const parmList[] = {"usr/bin/sort","output.txt","-o","output.txt",NULL}; //execv call to sort file for names. break; } default: sleep(1); printf("\nChild process has finished."); }