[SCANF] Allouer la mémoire automatiquement ?

Allouer la mémoire automatiquement ? [SCANF] - C++ - Programmation

Marsh Posté le 15-10-2002 à 16:58:32    

Je voudrais lire une chaine de caractère au clavier mais je ne connais pas sa longueur à l'avance.
 
Je voudrais donc savoir s'il existe une option de scanf (ou une autre fonction) qui permet d'allouer la quantité de mémoire nécessaire.
 
Merci :)
 

Reply

Marsh Posté le 15-10-2002 à 16:58:32   

Reply

Marsh Posté le 15-10-2002 à 17:31:32    

en C c'est impossible.
 
utilise plutot fgets() de stdio.h pour lutter contre les dépacement de capacité en limitant le nombre de caractères lus.
 

Code :
  1. const size_t n=1983;
  2. char buffer[n];
  3. fgets(buffer, n, stdin);


 
 
fgets lit au maximum n-1 caractère sur le fichier passé en paramètre 3 (ici l'entrée standard) et stocke les caractères lus dans buffer


Message édité par Taz@PPC le 15-10-2002 à 17:32:16

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-10-2002 à 17:35:52    

question bete : stdin etant un fichier, je peux faire un fseek dessus une fois que j'ai detecte la saisie d'un text pour savoir quelle taille allouer au buffer ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-10-2002 à 17:45:09    

jamais essayé directement (avec un freopen oui). mais ca doit sans doute etre possible


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-10-2002 à 20:12:04    

aaaaaah c'est pas bête du tout :):)
 
Merci bien, je vais tenter ça :)

Reply

Marsh Posté le 16-10-2002 à 00:53:39    

HelloWorld a écrit a écrit :

question bete : stdin etant un fichier, je peux faire un fseek dessus une fois que j'ai detecte la saisie d'un text pour savoir quelle taille allouer au buffer ?



fseek ne marche pas sur les "fichiers console".
Mais je ne sais plus où je l'ai lu...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed