problème de fscanf : comment faire de l'alloc dyna de mem ? [C++] - Programmation
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);
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 !
Marsh Posté le 18-03-2002 à 18:02:11
ReplyMarsh 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).
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 )
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/
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
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 :'(
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
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.
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.
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.
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...
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 !!!
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