IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Blocage du programme


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut Blocage du programme
    Bonjour à toutes et à tous,
    Recemment j'ai décidé de me remettre au C. Je travaille sur un TOSHIBA Satellite tournant sous windows 7 édition familiale prénium 64 bits avec processeur AMD E-300 APU. Pour éditer mes codes sources j'utilise Notepad++ v6.1.8 encodage en ANSI. Pour compiler ceux ci j'utilise MinGW-64 (gcc v5.3.0 (x86_64-posix-seh-rev0).
    Vu que je me remet doucement j'ai commencé par quelque chose de basique.
    Voici les codes sources posant problème .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
    int main(int argc,char* argv[])
    {
    	char buffer[20];
    	gets(buffer);
    	printf("Hello %s",buffer);
    	return 0;
    }
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdio.h>
    int main(int argc,char* argv[])
    {
            puts(argv[0]);
    	return 0;
    }
    Je compile:
    gcc helloworld.c -o bin\helloworld.exe
    Pas d'erreurs à la compilation.
    Mais à chaque fois le programme bloque (je le lance depuis une fenêtre terminal windows).

    Par contre ce code ci ne pose pas de problème et affiche bien 'helloworld' .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdio.h>
    int main(int argc,char* argv[])
    {
    	printf("Hello %s",argv[0]);
    	return 0;
    }
    Du coup je suis un peu perdu. Ai je choisi une mauvaise version du compilateur non adaptée à mon système du coup le programme planterait à l'exécution?
    Si oui pourquoi alors n'ai je pas de problèmes quand j'utilise printf? Sinon quelle serait l'erreur que j'aurais commise?

    Merci pour vos réponses.

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    C'est le programme avec puts qui ne termine pas ? Question idiote mais es-tu sûr de ce que tu compiles et exécutes ? As-tu le même comportement dans un autre terminal (Cygwin, MSYS2...) ?

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    Dubitatif du blocage...

    Remarque importante : il ne faut pas utiliser gets() ! Une explication simple ici (http://c.developpez.com/faq/?page=Bo...aveur-de-fgets) et une autre plus complète là (https://gradot.wordpress.com/2013/05...-programmes-c/).

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 242
    Par défaut
    Citation Envoyé par crotinou Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
    int main(int argc,char* argv[])
    {
    	char buffer[20];
    	gets(buffer);
    	printf("Hello %s",buffer);
    	return 0;
    }
    Une fois le programme lancé, rien ne se passe si tu tapes au clavier en finissant ta phrase par la touche Entrée ? (en faisant attention de ne pas dépasser la limite de 19 caractères)




    Citation Envoyé par crotinou Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdio.h>
    int main(int argc,char* argv[])
    {
            puts(argv[0]);
    	return 0;
    }
    J'aurai tendance a dire que c'est normal car si tu lances ton .exe sans paramètre, je ne vois pas ce que puts peut bien t'afficher ???

    Si tu lances ton .exe de cette façon, toujours depuis un terminal Windows, qu'est ce qui se passe ? La chaîne de caractère "Bonjour" étant argv[0].

    A+

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 492
    Billets dans le blog
    1
    Par défaut
    argv[0] n'est -il pas le nom du programme ?

  6. #6
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 242
    Par défaut
    +1 Bktero,
    Autant pour moi, c'est le nom du programme.

    Donc il n'y a aucune raison que le second programme bloque !

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut problème version gcc?
    D'abord merci pour les réponses.
    Bon je pense que le problème vient de gcc (mauvaise version?). Avec ce nouveau code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    int main(int argc,char* argv[])
    {
    	char buffer[20];
    	printf("Avant");
    	gets(buffer);
    	printf("Après");
    	printf("Hello %s",buffer);
    	return 0;
    }
    Après compilation je lance le programme et fait ce qu'il doit faire (peu de choses certes). Je peux entrer une chaine de caractère apres que le programme ait affiché "avant" etc...
    Curieux je relance une compilation sans toucher au code, relance le programme et là rien (pas d'affichage ou d'entrée clavier).
    Autre chose assez curieuse, dans le Gestionnaire des taches je m'aperçois que les processus helloworld.exe restent en mémoire que le programme ait fonctionné ou non.
    Auriez vous entendu parler de tels disfonctionnements avec windows 7? Ou comme je le présume je n'ai pas la bonne version de gcc?

  8. #8
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par crotinou Voir le message
    je pense que le problème vient de gcc
    vraiment ? d'un coté gcc est un logiciel très complexe fait par tout pleins de programmeurs vraiment très expérimentés, de l'autre on a un programmeur C débutant, et tu penses que le problème vient de gcc ?

    vu d'ici je peux me tromper mais je pense que ce que tu prends pour un blocage c'est le fait que tu ne vois simplement pas les lignes qui devraient s'afficher, réponse courte: rajoute un fflush(stdout); derrière ton printf ou ton puts, et prends l'habitude de mettre des \n à la fin de tes chaines dans printf

  9. #9
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    De plus, tu ne nous as pas répondu. Quel est le programme qui bloque ? Quel est le comportement exact dont tu es témoin ? Qu'affiche la console ? Que se passe-t-il sur un autre terminal ?

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par BufferBob Voir le message
    d'un coté gcc est un logiciel très complexe fait par tout pleins de programmeurs vraiment très expérimentés, de l'autre on a un programmeur C débutant, et tu penses que le problème vient de gcc ?
    Ben tu sais, Windows est un logiciel très complexe fait par tout pleins de programmeurs vraiment très expérimentés mais ça n'empêche pas que chaque fois qu'un type arrive en disant "j'ai un problème avec windows" on lui réponde "c'est normal, ça vient de windows"...

    Citation Envoyé par BufferBob Voir le message
    rajoute un fflush(stdout); derrière ton printf ou ton puts, et prends l'habitude de mettre des \n à la fin de tes chaines dans printf
    +1 pour le fflush(stdout); et le \n mais je ne pense pas que ce soit ça. Quand un programme se termine, il vide ses buffers. Ceci dit, c'est effectivement plus agréable, quand on affiche un truc, de l'afficher entièrement avec aussi son saut de ligne.

    @crotinou
    Dans ton premier programme tu n'as pas d'invite de saisie. Peut-être que ce que tu prends pour un blocage n'est que le programme attendant ta saisie... Essaye ce petit code
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    int main(int argc,char* argv[])
    {
        char buffer[20];
        printf("Entrez une chaine :");
        fflush(stdout);
        fgets(buffer, 20, stdin);   // On t'a déjà dit de ne pas utiliser gets() !!!
        printf("Hello [%s]\n", buffer);   // En mode debug, prends l'habitude d'encadrer les chaines avec des caractères visibles pour "voir" aussi une chaine vide...
        return 0;
    }
    ...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    C'est le programme avec puts qui ne termine pas ? Question idiote mais es-tu sûr de ce que tu compiles et exécutes ? As-tu le même comportement dans un autre terminal (Cygwin, MSYS2...) ?
    Bonsoir c'était les deux premiers programmes qui ne se lançaient pas du tout (pas de problème de programme qui ne se termine pas). Le troisième par contre fonctionnait.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Ben tu sais, Windows est un logiciel très complexe fait par tout pleins de programmeurs vraiment très expérimentés mais ça n'empêche pas que chaque fois qu'un type arrive en disant "j'ai un problème avec windows" on lui réponde "c'est normal, ça vient de windows"...


    +1 pour le fflush(stdout); et le \n mais je ne pense pas que ce soit ça. Quand un programme se termine, il vide ses buffers. Ceci dit, c'est effectivement plus agréable, quand on affiche un truc, de l'afficher entièrement avec aussi son saut de ligne.

    @crotinou
    Dans ton premier programme tu n'as pas d'invite de saisie. Peut-être que ce que tu prends pour un blocage n'est que le programme attendant ta saisie... Essaye ce petit code
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    int main(int argc,char* argv[])
    {
        char buffer[20];
        printf("Entrez une chaine :");
        fflush(stdout);
        fgets(buffer, 20, stdin);   // On t'a déjà dit de ne pas utiliser gets() !!!
        printf("Hello [%s]\n", buffer);   // En mode debug, prends l'habitude d'encadrer les chaines avec des caractères visibles pour "voir" aussi une chaine vide...
        return 0;
    }
    ...
    Oui je n'ai pas mis d'invite de saisie. Et je confirme j'avais beau appuyer sur les touches du clavier rien ne s'affichait pas de réaction. Et puis pour gets() c'est sur c'est pas glop mais ce programme est juste pour me refaire la main et non je ne comptait pas provoquer de plantage du programme. Mais merci aussi pour les conseils etc..

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    salut,


    vraiment ? d'un coté gcc est un logiciel très complexe fait par tout pleins de programmeurs vraiment très expérimentés, de l'autre on a un programmeur C débutant, et tu penses que le problème vient de gcc ?

    vu d'ici je peux me tromper mais je pense que ce que tu prends pour un blocage c'est le fait que tu ne vois simplement pas les lignes qui devraient s'afficher, réponse courte: rajoute un fflush(stdout); derrière ton printf ou ton puts, et prends l'habitude de mettre des \n à la fin de tes chaines dans printf
    Ah je me suis mal fait comprendre, je ne dis pas que gcc merdouille très très loin de là. Je pense juste avoir fait une bévue de débutant et ne pas avoir la version adaptée à mon système (voir mon premier post). Et comme je l'ai posté hier, un coup un code marche et juste en recompilant une nouvelle fois ça merdouille. Et oui le programme bloque réellement car le prompt ne s'affiche plus après le lancement du programme.
    Merci quand même.
    Et santé aussi

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par crotinou Voir le message
    Et comme je l'ai posté hier, un coup un code marche et juste en recompilant une nouvelle fois ça merdouille.
    Oui on avait compris. Mais on reste sec sur la cause. C'est pourquoi je t'ai proposé un autre code testé. S'il merdouille lui-aussi alors là on saura que ça vient de ton environnement et on pourra alors te proposer d'autres chemins...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Oui on avait compris. Mais on reste sec sur la cause. C'est pourquoi je t'ai proposé un autre code testé. S'il merdouille lui-aussi alors là on saura que ça vient de ton environnement et on pourra alors te proposer d'autres chemins...
    J'ai écouté ton conseil et tenté un autre code celui que tu m'avais proposé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <stdio.h>
    int main(int argc,char* argv[])
    {
        char buffer[20];
        printf("Entrez une chaine :");
        fflush(stdout);
        fgets(buffer, 20, stdin);   // On t'a déjà dit de ne pas utiliser gets() !!!
        printf("Hello [%s]\n", buffer);   // En mode debug, prends l'habitude d'encadrer les chaines avec des caractères visibles pour "voir" aussi une chaine vide...
        return 0;
    }
    Du coup je confirme ça bloque (voir capture d'écran), rien ne réagit. C'est certainement un problème de configuration:
    Nom : terminal_programme_bloque.jpg
Affichages : 237
Taille : 63,2 Ko
    Du coup je me tourne vers visual studio 2008 en attendant. Mais je suis quand même curieux de savoir la cause de ces blocages?
    Encore merci pour les réponses.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2014
    Messages : 7
    Par défaut Solution trouvée!
    Bonsoir à tous,
    PROBLEME RESOLU c'est AVAST la source du problème:
    En effet celui ci effectue un scan des exécutables avant que ceux ci soient lancés sauf ceux étant dans les branches de l'arborescence spécifiées dans une liste.
    La procédure pour remédier au problème est la suivante:

    Ouvrir la fenêtre AVAST-->cliquez "PARAMETRES" (une fenêtre s'ouvre)-->cliquez "Protection active"-->cliquez "Personnaliser" en face de "Agent des fichiers"-->cliquez "Exclusions"-->cliquez "Ajouter" ceci afin d'ajouter le répertoire racine de vos exécutables afin que ceux ci ne soient plus concernés par le scan.

    Solution trouvée sur un autre forum du site.

    Merci à tous.

  17. #17
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par crotinou Voir le message
    PROBLEME RESOLU c'est AVAST la source du problème:
    Ouvrir la fenêtre AVAST-->cliquez "PARAMETRES" (une fenêtre s'ouvre)-->cliquez "Protection active"-->cliquez "Personnaliser" en face de "Agent des fichiers"-->cliquez "Exclusions"-->cliquez "Ajouter" ceci afin d'ajouter le répertoire racine de vos exécutables afin que ceux ci ne soient plus concernés par le scan.
    Joli

    Bizarre toutefois qu'Avast "bloque" sans rien faire d'autre. Généralement soit il détecte un danger et arrête le programme (et le déplace dans la zone de quarantaine), soit il ne détecte rien et laisse passer mais dans les deux cas, ça reste sain (le programme a fonctionné et s'est terminé ou bien il ne s'est jamais exécuté). T'es allé voir dans la zone de quarantaine si tes execs y sont ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  18. #18
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    à mon avis c'est plus sûrement la partie sandbox de Avast!, mais normalement au bout de quelques secondes un popup apparait pour demander si on veut exec dans la sandbox ou non, y'a pas de raison que la partie antivirus bloque sur un simple helloworld compilé standard

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD16] Applidis - Lenteur/Blocage du programme au lancement
    Par Tancredi dans le forum WinDev
    Réponses: 7
    Dernier message: 02/12/2012, 20h56
  2. blocage du programme sur méthode getConnexion
    Par smith_dev dans le forum JDBC
    Réponses: 14
    Dernier message: 03/12/2008, 13h27
  3. [TPW] Blocage du programme lors de l'exécution
    Par JetliMohamed dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 03/01/2008, 00h47
  4. Blocage de programme au demarrage
    Par noussibeau dans le forum Windows Vista
    Réponses: 8
    Dernier message: 09/11/2007, 10h08
  5. blocage de programme
    Par zerocoolyoussef dans le forum Windows
    Réponses: 9
    Dernier message: 19/05/2006, 21h41

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