Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1

    Homme Profil pro mohsenuss don
    Étudiant
    Inscrit en
    avril 2011
    Messages
    215
    Détails du profil
    Informations personnelles :
    Nom : Homme mohsenuss don
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 215
    Points : -57
    Points
    -57

    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 :
    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 :
    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
    Responsable Sécurité

    Avatar de Neckara
    Homme Profil pro Denis
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    4 443
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2011
    Messages : 4 443
    Points : 12 845
    Points
    12 845

    Par défaut

    Bonjour, ne manquerait-il pas string.h ?
    On dit "bibliothèque" pas "librairie" !

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

  3. #3
    Responsable Modération

    Avatar de ok.Idriss
    Homme Profil pro Idriss Neumann
    Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
    Inscrit en
    février 2009
    Messages
    4 710
    Détails du profil
    Informations personnelles :
    Nom : Homme Idriss Neumann
    Âge : 23
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : février 2009
    Messages : 4 710
    Points : 16 653
    Points
    16 653

    Par défaut

    Bonjour.

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

    Code :
    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
    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 mohsenuss don
    Étudiant
    Inscrit en
    avril 2011
    Messages
    215
    Détails du profil
    Informations personnelles :
    Nom : Homme mohsenuss don
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 215
    Points : -57
    Points
    -57

    Par défaut

    comment régler l'erreur de la ligne 25 svp !
    Code :
    printf("%s n a pu etre executée\n",);

  5. #5
    Responsable Modération

    Avatar de ok.Idriss
    Homme Profil pro Idriss Neumann
    Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
    Inscrit en
    février 2009
    Messages
    4 710
    Détails du profil
    Informations personnelles :
    Nom : Homme Idriss Neumann
    Âge : 23
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : février 2009
    Messages : 4 710
    Points : 16 653
    Points
    16 653

    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
    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 mohsenuss don
    Étudiant
    Inscrit en
    avril 2011
    Messages
    215
    Détails du profil
    Informations personnelles :
    Nom : Homme mohsenuss don
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 215
    Points : -57
    Points
    -57

    Par défaut

    voila le programme qu'en pensez vous !
    Code :
    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
    Responsable Sécurité

    Avatar de Neckara
    Homme Profil pro Denis
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    4 443
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2011
    Messages : 4 443
    Points : 12 845
    Points
    12 845

    Par défaut

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

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

  8. #8

    Homme Profil pro mohsenuss don
    Étudiant
    Inscrit en
    avril 2011
    Messages
    215
    Détails du profil
    Informations personnelles :
    Nom : Homme mohsenuss don
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2011
    Messages : 215
    Points : -57
    Points
    -57

    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 :
    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
    Responsable Sécurité

    Avatar de Neckara
    Homme Profil pro Denis
    Étudiant
    Inscrit en
    décembre 2011
    Messages
    4 443
    Détails du profil
    Informations personnelles :
    Nom : Homme Denis
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2011
    Messages : 4 443
    Points : 12 845
    Points
    12 845

    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 "bibliothèque" pas "librairie" !

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

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2011
    Messages : 254
    Points : 444
    Points
    444

    Par défaut

    Code :
    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
    Responsable Modération

    Avatar de ok.Idriss
    Homme Profil pro Idriss Neumann
    Consultant en SSII et auditeur au CNAM Paris (ingénieur SI)
    Inscrit en
    février 2009
    Messages
    4 710
    Détails du profil
    Informations personnelles :
    Nom : Homme Idriss Neumann
    Âge : 23
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : février 2009
    Messages : 4 710
    Points : 16 653
    Points
    16 653

    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
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •