[C++] problème de fscanf : comment faire de l'alloc dyna de mem ?

problème de fscanf : comment faire de l'alloc dyna de mem ? [C++] - Programmation

Marsh Posté le 18-03-2002 à 17:15:37    

j'ai déclaré un char *buffer. Mais lorsque je fais mon fscanf("%s" ), comment allouer assez de mémoire à buffer, étant donné que je ne connais pas la taille de mon %s ? Je veux bien une solution, si vous savez !
 
merci d'avance

Reply

Marsh Posté le 18-03-2002 à 17:15:37   

Reply

Marsh Posté le 18-03-2002 à 17:37:51    

:??:  
si tu connais pas la taille ça va être dure !
 
un buffer a par définition une taille fixe, suffisemment importante.
 
sinon l'allocation dynamique c'est :

char* buffer;
buffer = (char*)malloc(taille_de_ton_buffer_en_octets);
...
free(buffer);


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
Reply

Marsh Posté le 18-03-2002 à 17:56:46    

je sais comment on fait un alloc quand même (!), mais ce n'était pas la question !

Reply

Marsh Posté le 18-03-2002 à 18:02:11    

:fou:


---------------
Chết rồi ! ✍ ⌥⌘ http://github.com/gwenhael-le-moine/slackbuilds/
Reply

Marsh Posté le 18-03-2002 à 20:22:32    

Je ne vois qu'une solution : utiliser fgets (et pas fscanf, qui PU LE PATé), avec une limitation en taille, et si la ligne n'est pas finie, hop ! un autre fgets (bref, une boucle qui continue tant qu'on n'arrive pas à la fin de la ligne) qui viendra prolonger la chaîne (realloc 15 y0uR m45t3R).

Reply

Marsh Posté le 18-03-2002 à 20:24:20    

cycojesus a écrit a écrit :

:??:  
si tu connais pas la taille ça va être dure !
 
un buffer a par définition une taille fixe, suffisemment importante.
 
sinon l'allocation dynamique c'est :

char* buffer;
buffer = (char*)malloc(taille_de_ton_buffer_en_octets);
...
free(buffer);
 




 
en C c'est ca mais surrement pas en C++ (qui est marker sur le topic )


---------------
What butter and whiskey won't cure, there is no cure for.
Reply

Marsh Posté le 18-03-2002 à 21:04:10    

Jar Jar a écrit a écrit :

(et pas fscanf, qui PU LE PATé)




 
C'est bien connu:
 
http://fscanf.ca.pu.le.pate.ath.cx/


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-03-2002 à 21:22:34    

fscanf ou fgets ne te permettent pas de faire ca.
Soit tu le fais en plusieurs passes
avec des realloc quand tu as besoin de rajouter
des caracteres,
soit tu utilises les fonctions de la librairie standard
C++ qui te font ca tout seuls:
string (chaine dynamique) et getline.
 
A+
LEGREG

Reply

Marsh Posté le 18-03-2002 à 21:26:42    

legreg a écrit a écrit :

string (chaine dynamique) et getline.



getline, c'est génial, mais c'est pas portable :'(

Reply

Marsh Posté le 18-03-2002 à 22:57:20    

getline pas portable??
 
Il suffit pourtant d'avoir un compilateur C++,
il me semble.
 
Bon evidemment ca marche pas en C..
 
LEGREG

Reply

Marsh Posté le 18-03-2002 à 22:57:20   

Reply

Marsh Posté le 18-03-2002 à 23:04:40    

legreg a écrit a écrit :

getline pas portable??
 
Il suffit pourtant d'avoir un compilateur C++,
il me semble.
 
Bon evidemment ca marche pas en C..



Ça marche en C, mais sur les systèmes GNU.
Pour le C++, je viens d'essayer sous Solaris avec g++, et c'est niet.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 18-03-2002 à 23:08:02    

Jar Jar a écrit a écrit :

 
Ça marche en C, mais sur les systèmes GNU.
Pour le C++, je viens d'essayer sous Solaris avec g++, et c'est niet.  




Tu dois confondre la lib readline et la méthode getline de iostream.

Reply

Marsh Posté le 18-03-2002 à 23:22:07    

Verdoux a écrit a écrit :

Tu dois confondre la lib readline et la méthode getline de iostream.



Non, je confondais avec la fonction getline de la glibc2. Désolé.  
Et pis z'avez qu'à pas faire de C++, d'abord.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 18-03-2002 à 23:37:59    

torpe23, pour ton blem, tu peux utiliser une string à la quelle tu va ajouter chaque octet que tu va lire, la string se redimentionnant toute seule... mais bon c boeuf...

Reply

Marsh Posté le 19-03-2002 à 10:43:36    

bjone a écrit a écrit :

torpe23, pour ton blem, tu peux utiliser une string à la quelle tu va ajouter chaque octet que tu va lire, la string se redimentionnant toute seule... mais bon c boeuf...


AAAAAAAARRRGGHHHH !!! Pitié, surtout ne faites jamais de trucs comme ça !!!


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 20-03-2002 à 14:34:28    

bin c boeuf.... :lol:

Reply

Sujets relatifs:

Leave a Replay

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