Taille des variables

appstmd Messages postés 27 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 17 mai 2005 - 15 févr. 2002 à 21:34
appstmd Messages postés 27 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 17 mai 2005 - 17 févr. 2002 à 22:32
Bonjour !

J'ai des problèmes avec l'utilisation des variables de chaîne de caractères : je ne connais pas la taille, je suis donc obligé de déclarer mes variables avec un "gros" nombre pour avoir une marge, mais ceci ralenti le programme et provoque parfois des plantages. Par exemple char BufferData[5000000];
Je dois manipuler des variables de plusieurs ko.

Existe-t-il une solution pour créer des variables dynamiques comme sous VB, où l'on peut modifier la taille à volonté ?
J'ai essayé d'utiliser le type LPTSTR mais ceci me provoque des plantages en utilisant les fonctions lstrcpy, ...

Merci ! :)

7 réponses

mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 1
15 févr. 2002 à 22:15
char *BufferData;
0
appstmd Messages postés 27 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 17 mai 2005
15 févr. 2002 à 22:56
Ca ne marche pas, quand j'utilise des fonctions de lecture de fichier :

ReadFile (hFile, BufferData, 3, &ByteRead, (LPOVERLAPPED) NULL);
MessageBox (0, BufferData,"Mamate",0);

Ceci me renvoie un message vide !
0
mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 1
15 févr. 2002 à 23:49
Ah ouais t'utilise les fonctions de Windows ?-) , je vais voir ça se soir et je t'en reparle dès que possible ! @+
0
Croqmort Messages postés 95 Date d'inscription mercredi 5 décembre 2001 Statut Membre Dernière intervention 27 juin 2006
16 févr. 2002 à 01:11
il faut que tu alloue de la memoire avant :
char *BufferData;

et dans ton programme une fois que tu connais la taille tu fait :
BufferData = new char[taille];
une fois que tu a fini de t'utiliser de BufferData tu fait :
delete [] BufferData;

si tu ne connais jamais la taille le mieux c de faire une class
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 1
16 févr. 2002 à 01:44
J'ai regardé la fonction ReadFile, elle m'a semblé trop compliqué pour moi :( enfin j'étais trop fainéant pour essayer de la comprendre mais j'ai quand même trouvé une fonction pour lire un fichier et mettre le contenu de ce fichier dans une variable comme tu l'a demandé (cf. Rapid Code Source de NitRic) :

LoadFile(const char *FileName, char **pBuffer)
{

HANDLE file = NULL;
bool bReturn = false;
unsigned int FileSize = 0;
char *tBuf = NULL;
// Ouvre le fichier
file = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
if (file != INVALID_HANDLE_VALUE)
{
// Récupère la taille du fichier
FileSize = GetFileSize(file, NULL);
if (FileSize != 0xFFFFFFFF)
{
// Alloue de la mémoire
tBuf = (LPSTR)GlobalAlloc(GPTR, (FileSize + 1));

if (tBuf != NULL)
{

DWORD Read;
// Récupère le contenue du fichier
if (ReadFile(file, tBuf, FileSize, &Read, NULL))
{
// Envoie le tout dans pBuffer
*pBuffer = new char[(FileSize + 1)];
strcpy(*pBuffer, tBuf);

bReturn = true;

}
// Libère la mémoire
GlobalFree(tBuf);

}

}
// Ferme le fichier
CloseHandle(file);

}

return bReturn;

}

Ou bien mon code source :) :

#include

#include <stdlib.h> //** Pour la fonction system(); .
#include <stdio.h> //* Pour la gestion des fichiers.

void main()
{
FILE *fichier; //** Défini une nouvelle 'variable' de type FILE (fichier).
fichier = fopen("test.txt","rt"); //* Ouvre le fichier 'test.txt'.

char *contenu; //** Variable servant a contenir le contenu du fichier 'test.txt'.
int i; //* Variable contenant le nombre de caractères du fichier.

fseek(fichier, 0, 0); //* On se place au début du fichier.

while(!(feof(fichier))) //** Tant qu'on a pas atteint la fin du fichier
{ //* on met le contenu du fichier 'test.txt dans
fgets(contenu, i++, fichier); //* la variable 'contenu'.
}

cout
<< contenu << endl; // Affiche le contenu du fichier 'test.txt'.

fclose(fichier); // Ferme le fichier précédement ouvert.

system("PAUSE"); // Attend une entrée clavier.
}
0
mmuller57 Messages postés 174 Date d'inscription mardi 10 avril 2001 Statut Membre Dernière intervention 30 juillet 2003 1
16 févr. 2002 à 01:48
Euh désolé ce code était pas pour toi :(
0
appstmd Messages postés 27 Date d'inscription mardi 31 juillet 2001 Statut Membre Dernière intervention 17 mai 2005
17 févr. 2002 à 22:32
Merci, ceci devrait fonctionner maintenant.
0
Rejoignez-nous