int tailleTableau=200;
char chaine[tailleTableau];
J'ai besoin de déclarer une chaine de caractère mais au départ je ne sais pas quelle est sa taille.
char chaine[tailleTableau]; ne veux pas compiler
char chaine[]; ne veux pas compiler
int tailleTableau=200;
char chaine[tailleTableau];
J'ai besoin de déclarer une chaine de caractère mais au départ je ne sais pas quelle est sa taille.
char chaine[tailleTableau]; ne veux pas compiler
char chaine[]; ne veux pas compiler
Connaissez vous la taille max? Va elle poser un problème mémoire si elle est allouée en permanence ? Si non, alors allouez un tableau avec le max;
si ce n'est pas possible, il faut utiliser [
malloc()
](http://www.cplusplus.com/reference/cstdlib/malloc/) (et free()
pour libérer la mémoire)
char * buffer;
buffer = (char*) malloc (30); // 30 octets alloués pour notre tableau
if (buffer==NULL) {
// problème, pas assez de mémoire pour l'allocation
// vous devez décider de ce que vous faites alors pour ne pas planter
} else {
// tout va bien vous pouvez utiliser buffer comme un tableau
strcpy(buffer,"hello World"); // on remplit le buffer avec une chaine
buffer[0] = 'H'; / on peut l'utiliser comme un tableau
}
....
if (buffer) free(buffer); // on rend la mémoire si pas null
On démarrage du programme je ne connais pas la taille Max je vais lire un fichier txt qui a une taille variable. c'est ce fichier que je veux mettre dans la chaine de caractère.
Je lit le fichier une première fois et je connais alors sa taille c'est à ce moment que je veux déclarer ma variable
char chaine[tailleTableau];
avec la bonne taille pour ne pas surcharger la mémoir.
C'est une stratégie que l'on peut s'autoriser sur un processeur ayant beaucoup de mémoire. Mais sur un processeur n'ayant que quelques ko de mémoire on a pas ce luxe. Il est de loin préférable d'ouvrir un tableau d'une taille raisonnable et de lire le fichier par tronçon. Sinon tu risques de te trouver dans un cas où le fichier est plus gros que ta RAM et là tu fais quoi??
"Surcharger" la mémoire ce n'est pas un problème tant que ça ne déborde pas. Il n'y a pas de mal à utiliser ce qui est disponible.
Mais lire tout un fichier de taille aléatoire en mémoire ce n'est pas une stratégie efficace, lisez bout par bout (ligne par ligne ou "token" par 'token")
(Pas la peine de lire une fois tout le fichier pour connaître sa taille, vous avez une fonction fileSize
dans la librairie SDFat
Très bon site qui explique très bien Malloc
https://openclassrooms.com/courses/apprenez-a-programmer-en-c/l-allocation-dynamique