CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Lecture entrée standard

_S0uL
_S0uL
Niveau 9
11 novembre 2016 à 12:05:20

Salut,

Je suis en train de tester un petit bout de code qui provoque un comportement que je ne comprends pas
Voilà le code que j'ai :


int
main (void)
{
  char * s = malloc (sizeof (char) * 100);
  while (1)
    {
      if (fgets (s, sizeof (s), stdin) == NULL)
        {
          printf ("NULL");
          break;
        }
      else
        {
          if (s[0] == '\n')
            {
              printf ("RET");
              break;
            }
        }
    }
  return 0;
}

Le problème : Quand je tape 7 caractères sur l'entrée standard il rentre dans la condition if (s[0] == '\n'). Je n'ai pas trouver d'explication à ce comportement.

Merci.

Ps : Tant que j'y suis j'ai essayé de débugger avec gdb mais je m'en sert tellement peu que j'ai un peu tout oublié. Normalement si je compile avec cc -g test.c -o test Je devrai pouvoir débugger mon programme dans gdb non ? Je ne m'en suis jamais servis sur ma machine actuelle et je suis un peu rouillé là dessus. Parce que quand je lance gdb test et que je tape file il me donne ça :


No executable file now.
Discard symbol table from `/home/matt/test'? (y or n) 
Candystand
Candystand
Niveau 10
11 novembre 2016 à 13:04:39

Je pense que le fait que tu aie mis sizeof(s) au lieu de 99 (et non 100, prend en compte le \0) y est pour quelque chose

_S0uL
_S0uL
Niveau 9
11 novembre 2016 à 13:22:10

Oui exact. Quand je fais un printf (sizeof (s)); il me renvoie 8. En relisant la page de man de fgets j'aurai en effet du voir que je devait indiquer le nombre de caractères à lire et non un taille.
Merci bien.
Je laisse le topic non résolu pour ma question concernant gdb

f0c300
f0c300
Niveau 10
11 novembre 2016 à 13:36:33

Je laisse le topic non résolu pour ma question concernant gdb

Tu utilises quelle distribution?
Sous ma debian, cc renvoie vers clang et non gcc, tu as probablement le meme souci. Mais en theorie tu devrais pouvoir debugger avec les deux. :(

update-alternatives --list cc 

me renvoie
/usr/bin/clang

Tu as le choix, tu peux :
- utiliser lldb plutot que gdb.
- explicitement appeler gcc plutot que cc
- reconfigurer ton systeme pour faire pointer cc vers gcc

Ensuite tu peux essayer de compiler avec le flag -g pour avoir plus de possibilites.

Mais ca ne resoudra probablement pas ton probleme. :(

Message édité le 11 novembre 2016 à 13:39:34 par f0c300
lokilok
lokilok
Niveau 17
11 novembre 2016 à 16:13:34

Le 11 novembre 2016 à 13:04:39 Candystand a écrit :
Je pense que le fait que tu aie mis sizeof(s) au lieu de 99 (et non 100, prend en compte le \0) y est pour quelque chose

http://www.cplusplus.com/reference/cstdio/fgets/

char * fgets ( char * str, int num, FILE * stream );
num : Maximum number of characters to be copied into str (including the terminating null-character).

Candystand
Candystand
Niveau 10
11 novembre 2016 à 17:11:27

Le 11 novembre 2016 à 16:13:34 lokilok a écrit :

Le 11 novembre 2016 à 13:04:39 Candystand a écrit :
Je pense que le fait que tu aie mis sizeof(s) au lieu de 99 (et non 100, prend en compte le \0) y est pour quelque chose

http://www.cplusplus.com/reference/cstdio/fgets/

char * fgets ( char * str, int num, FILE * stream );
num : Maximum number of characters to be copied into str (including the terminating null-character).

Ok très bien autant pour moi

_S0uL
_S0uL
Niveau 9
11 novembre 2016 à 17:31:27

Tu utilises quelle distribution?
Sous ma debian, cc renvoie vers clang et non gcc, tu as probablement le meme souci. Mais en theorie tu devrais pouvoir debugger avec les deux. :(

Fedora 24

update-alternatives --list cc 

me renvoie
/usr/bin/clang

La version RedHat de cette commande si je ne me trompe pas est update-alternatives --list | grep cc. En tout cas elle ne me renvoie rien :( J'en déduit que le problème vient certainement de là. Je ne m'était jamais demandé sur quoi pointait cc en réalité. J'ai toujours compilé avec ça dans mes Makefiles à la fac et j'ai pas vraiment cherché plus loin.

Du coup j'ai compilé explicitement avec gcc et je peux maintenant débugger avec gdb merci à toi.

Edit : J'ai fait un cc --version et il me renvoie :

 cc (GCC) 6.2.1 20160916 (Red Hat 6.2.1-2)
Copyright © 2016 Free Software Foundation, Inc.
Ce logiciel est libre; voir les sources pour les conditions de copie.  Il n'y a PAS
GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.
Message édité le 11 novembre 2016 à 17:33:07 par _S0uL
_S0uL
_S0uL
Niveau 9
11 novembre 2016 à 17:40:47

Il y a quelque chose que je ne dois pas saisir dans le fonctionnement de gdb... J'ai toujours le même message quand je lance file mais du coup quand je lance un run mon programme se démarre. Il faudra que je me reforme là dessus. Merci à vous trois.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment