p
u
b
l
i
c
i
t
é
publicité
  1. #1

    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2011
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 283
    Points : -42
    Points
    -42

    Par défaut Erreurs dont "expected expression before ‘)’ token" dans mon fichier source

    Voila un petit programme en C (tiré d'un support de cour) que j'essai de l’exécuter sous ubuntu 12.04 LTS.
    Il m'affiche des erreurs et j'arrive pas a les comprendre.

    Aidez-moi svp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #include <stdlib.h>	// pour exit()
    #include <unistd.h>	// pour getpid()
    #include <signal.h> 	// pour sleep()
    #include <sys/types.h>	// pour fork()
    #include <stdio.h>	// pour printf()
    int main()
    {
    	char buf[256];
    	int pid;
    	int status;
     
    printf("%%");	// imprimer un prompt %
    	while(fgets(buf,256,0)!= NULL)
    	{
    		buf[strlen(buf)-1]=0;
     
    		if((pid==fork())<0)                                        // erreur de fork
    			{	printf("Erreur de fork()");
    				exit(127);
     
    				break;
    			}else if (pid == 0)                                     // Processus Fils
    				{
                    execlp(buf,buf,(char *)0);
    				printf("%s n a pu etre executée\n",);
    				exit(127);
    			}
    							      // Processus Père
    				if ((pid==waitpid(pid,&status, 0))<0)
    				{   	printf("erreur dans wait\n");
    					Exit(127);
    				} printf("%%");
     
    	}
    exit(0);
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    recouvrementdepss.c: In function ‘main’:
    recouvrementdepss.c:15:7: attention : incompatible implicit declaration of built-in function ‘strlen’ [enabled by default]
    recouvrementdepss.c:25:41: erreur: expected expression before ‘)’ token
    Merci d'avance.

  2. #2
    Expert Confirmé Sénior

    Avatar de Neckara
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 480
    Points : 16 238
    Points
    16 238

    Par défaut

    Bonjour, ne manquerait-il pas string.h ?
    On dit "chiffrer" pas "crypter" !

    On dit "bibliothèque" pas "librairie" !

    Ma page DVP : http://neckara.developpez.com/

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    Consultant en SSII et ingénieur CNAM Paris (spécialité SI)
    Inscrit en
    février 2009
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant en SSII et ingénieur CNAM Paris (spécialité SI)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 5 068
    Points : 17 610
    Points
    17 610

    Par défaut

    Bonjour.

    Un code indenté te permettrait d'y voir plus clair. Voici quelques remarques (voir les commentaires "CORRECTION") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <stdlib.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <string.h> /* CORRECTION : include manquant comme l'a fait judicieusement remarqué Neckara */
     
    int main(void){ /* CORRECTION : une fonction sans paramètre doit, en toute rigueur, mettre void entre parenthèse pour indiquer au compilateur qu'elle ne prend pas de paramètres */
    	char buf[256];
    	int pid;
    	int status;
     
    	printf("%%");	/* imprimer un prompt % */
    	while(fgets(buf,256,0)!= NULL){
    		buf[strlen(buf)-1]=0;
     
    		/* erreur de fork */
    		if((pid==fork())<0) {	
    			printf("Erreur de fork()");
    			exit(127);
     
    			/* CORRECTION : break; => ne sert à rien */
    		}else if (pid == 0){ /* Processus Fils */
    			execlp(buf,buf,(char *)0);
    			printf("%s n a pu etre executée\n",); /* CORRECTION : Oh une virgule qui se balade toute seule, d'où l'erreur ;) */
    			exit(127);
    		}
     
    		/* CORRECTION : Dans la logique des choses, on met un else if ici */
    		if ((pid==waitpid(pid,&status, 0))<0){   /* Processus Père */ 
    			printf("erreur dans wait\n");
    			Exit(127); /* Avec une majuscule ??? */
    		} 
     
    		printf("%%");
    	}
    	/* CORRECTION exit(0); => pourquoi exit ici, quand on peux retourner une valeur correspondant à la signature de main() ??? */
    	return EXIT_SUCCESS;
    }
    Cordialement,
    Idriss
    mes cours sur DVP | initiation aux bases de données relationnelles | FAQ Linux | FAQ tests
    la programmation Shell | bonnes pratiques Bash | exercices shells scripts & Bash corrigés
    Merci aussi de lire les règles du club

    "Forgiveness does not change the past, but it does enlarge the future." (Paul Boese)
    Traduction approximative : le pardon ne change pas le passé mais élargit l'horizon de l'avenir.

  4. #4

    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2011
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 283
    Points : -42
    Points
    -42

    Par défaut

    comment régler l'erreur de la ligne 25 svp !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%s n a pu etre executée\n",);

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    Consultant en SSII et ingénieur CNAM Paris (spécialité SI)
    Inscrit en
    février 2009
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant en SSII et ingénieur CNAM Paris (spécialité SI)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 5 068
    Points : 17 610
    Points
    17 610

    Par défaut

    Citation Envoyé par mohsenuss91 Voir le message
    comment régler l'erreur de la ligne 25 svp !
    Tu rigoles ou quoi ? T'as lu le commentaire ? Il manque un paramètre à printf ... faut faire davantage d'efforts que ça
    mes cours sur DVP | initiation aux bases de données relationnelles | FAQ Linux | FAQ tests
    la programmation Shell | bonnes pratiques Bash | exercices shells scripts & Bash corrigés
    Merci aussi de lire les règles du club

    "Forgiveness does not change the past, but it does enlarge the future." (Paul Boese)
    Traduction approximative : le pardon ne change pas le passé mais élargit l'horizon de l'avenir.

  6. #6

    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2011
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 283
    Points : -42
    Points
    -42

    Par défaut

    voila le programme qu'en pensez vous !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <stdlib.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <string.h>
     
    int main(void){
        char buf[256];
    	int pid;
    	int status;
     
    	printf("%%");	/* imprimer un prompt % */
    	while(fgets(buf,256,0)!= NULL){
    		buf[strlen(buf)-1]=0;
     
    		/* erreur de fork */
    		if((pid==fork())<0) {
    			printf("Erreur de fork()");
    			exit(127);
                break;
    		}else if (pid == 0){ /* Processus Fils */
    			execlp(buf,buf,(char *)0);
    			printf("%s n a pu etre executée\n",&buf[0]);
    			exit(127);
    		}
    	else if((pid==waitpid(pid,&status, 0))<0){   /* Processus Père */
    			printf("erreur dans wait\n");
    			exit(127);
    		}
     
    		printf("%%");
    	}
    	exit(0);
    }

  7. #7
    Expert Confirmé Sénior

    Avatar de Neckara
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 480
    Points : 16 238
    Points
    16 238

    Par défaut

    Je pense qu'on souhaite afficher le nom du programme qui n'a pas pu être lancé ie buf.
    On dit "chiffrer" pas "crypter" !

    On dit "bibliothèque" pas "librairie" !

    Ma page DVP : http://neckara.developpez.com/

  8. #8

    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2011
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 283
    Points : -42
    Points
    -42

    Par défaut

    Citation Envoyé par Neckara Voir le message
    Je pense qu'on souhaite afficher le nom du programme qui n'a pas pu être lancé ie buf.
    voila ou je suis arrivé mais une fois le programme exécuter je remarque rien de spéciale!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <stdlib.h>
    #include <unistd.h>
    #include <signal.h>
    #include <sys/types.h>
    #include <stdio.h>
    #include <string.h>
     
    int main(void){
        char buf[256];
    	int pid;
    	int status;
     
    	printf("%%");	/* imprimer un prompt % */
    	while(fgets(buf,256,0)!= NULL){
    		buf[strlen(buf)-1]=0;
     
    		/* erreur de fork */
    		if((pid==fork())<0) {
    			printf("Erreur de fork()");
    			exit(127);
                break;
    		}else if (pid == 0){ /* Processus Fils */
    			execlp(buf,buf,(char *)0);
    			printf("%s n a pu etre executée\n",&buf[0]);
    			exit(127);
    		}
    	else if((pid==waitpid(pid,&status, 0))<0){   /* Processus Père */
    			printf("erreur dans wait\n");
    			exit(127);
    		}
     
    		printf("%%");
    	}
    	exit(0);
    }

  9. #9
    Expert Confirmé Sénior

    Avatar de Neckara
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    5 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2011
    Messages : 5 480
    Points : 16 238
    Points
    16 238

    Par défaut

    Peux-tu être un peu plus précis?

    "Rien de spécial" ne nous avance pas tellement pour comprendre ce qui ne va pas.
    On dit "chiffrer" pas "crypter" !

    On dit "bibliothèque" pas "librairie" !

    Ma page DVP : http://neckara.developpez.com/

  10. #10
    Membre expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2011
    Messages : 288
    Points : 502
    Points
    502

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    if((pid==fork())<0) // --> if((pid=fork())<0)
    ...
    if((pid==waitpid(pid,&status, 0))<0) // --> if((pid=waitpid(pid,&status, 0))<0)
    ...
    Non?

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    Consultant en SSII et ingénieur CNAM Paris (spécialité SI)
    Inscrit en
    février 2009
    Messages
    5 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant en SSII et ingénieur CNAM Paris (spécialité SI)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 5 068
    Points : 17 610
    Points
    17 610

    Par défaut

    Si c'est bien des opérateurs d'affectation qu'il faut utiliser. Bien vu, ça m'avait échappé

    Sinon je constate que certaines remarques que Neckara et moi-même avons émises ne sont toujours pas prises en compte.
    mes cours sur DVP | initiation aux bases de données relationnelles | FAQ Linux | FAQ tests
    la programmation Shell | bonnes pratiques Bash | exercices shells scripts & Bash corrigés
    Merci aussi de lire les règles du club

    "Forgiveness does not change the past, but it does enlarge the future." (Paul Boese)
    Traduction approximative : le pardon ne change pas le passé mais élargit l'horizon de l'avenir.

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/03/2011, 23h04
  2. Réponses: 2
    Dernier message: 08/02/2010, 10h00
  3. Réponses: 3
    Dernier message: 15/05/2009, 16h18
  4. Réponses: 11
    Dernier message: 04/03/2009, 13h41
  5. expected primary-expression before '=' token
    Par steph_p dans le forum Débuter
    Réponses: 4
    Dernier message: 02/02/2009, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo