appstmd
Messages postés27Date d'inscriptionmardi 31 juillet 2001StatutMembreDernière intervention17 mai 2005
-
15 févr. 2002 à 21:34
appstmd
Messages postés27Date d'inscriptionmardi 31 juillet 2001StatutMembreDernière intervention17 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, ...
Croqmort
Messages postés95Date d'inscriptionmercredi 5 décembre 2001StatutMembreDernière intervention27 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
mmuller57
Messages postés174Date d'inscriptionmardi 10 avril 2001StatutMembreDernière intervention30 juillet 20031 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.