Prb de stockage fichier texte

Signaler
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
-
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
-
Bonjour tout le monde,
Voilà j'ai un problème dans mon programme. Je voudrais ouvrir un fichier texte et stocker son contenu dans une variable. Le problème c'est que quand je veux voir si le stockage a marcher il y a des caractères bizarres qui s'affichent à la fin et le nombre de caractères est nettement differents de ce que contient le fichier texte. Je vous met ma C source ci-dessous. J'utilise Dev-cpp comme compilateur.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{

unsigned long int j=0;
char stock[300];
FILE *fichier;
fichier = fopen("t1.txt","r");

while(1){
fscanf(fichier, "%c", &stock[j]);
j++;
if (feof(fichier)) break;
}
fclose(fichier);
printf("\nLa variable stock contient:\n");
printf("%s\n",stock);
printf("\nstock contient:%d caracteres\n",strlen(stock));
system("PAUSE");
return 0;
}

Si quelqu'un peut m'aider à résourdre ce problème ça serait bien.
Merci.
Jarod_Delaware

6 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Mets un zero final a ton tableau ! Et la, tout ira mieux ;)

+2(p - n)
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,



Une question : Et si ton fichier fait plus de 300 caractères ???

Si tu veux récuperer ton fichier entierement, regarde du coté de fread,
et alloue dynamiquement de la mémoire pour être certain de ton coup.


Matt...
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Salut,


Merci pour vos reponses.

*AlexMAN,
si j'ai bien compris il faut que j'ecrive:

while(1){
fscanf(fichier, "%c", &stock[j]);
j++;
stock[j] = 0;
if (feof(fichier)) break;
}

Par contre le nombre de caractères affiché par mon prog ne correspond pas au nombre de caractères contenu dans mon fichier texte. Dis moi si je me trompe.

*Matt67
Normalement mon fichier texte ne contient pas plus de 300 caractères. C'est pour cela que je n'ai pas regardé du côté de fread. Par contre, fread ce n'est pas un peu bourrin comme méthode?
Merci encore à tous pour vos réponses.

Jarod_Delaware
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
while(1){
fscanf(fichier, "%c", &stock[j]);
j++;
if (feof(fichier)) break;
}
stock[j] = 0;

Normalement, ca ne devrait pas poser de problemes (il est vrai que ce que tu as fait revient au mm, mais c'est pas tres propre).
Enfin, il est vrai aussi que lire caracteres par caracteres n'est pas conseillé, ca fait d'innombrables appels au fichier, ce qui est lent et donc a eviter.
fread() est bien, mais l'utilisation des API (si tu es sous Windows) serait mieux ;)

+2(p - n)
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ah, et une derniere chose : si ton fichier fait exactement 300 caracteres, il te faut de l'espace pour ton zero final, d'ou : char stock[301];

+2(p - n)
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
stock[j]=0; à la fin de la boucle ça me sort toujours un caractère indesirable à la fin. Par contre si je le met dans la boucle c'est OK. Bizzare.
Un autre truc que je voulais savoir, en fait je stock le contenu de mon fichier pour crypter son contenu et le stocker dans un autre fichier. Cependant, quand je veux ouvrir le fichier crypté et decrypter son contenu la methode que j'ai ecris précedement ne marche plus je suis obligé d'écrire:
...
while(fgets(output, sizeof(output), filez))
printf("%s", output1);

je sais pas pourquoi. Je vais voir aussi du coté de fread, mais bon pour le moment je ne sais pas trop comment ca marche.

Merci encore pour tes réponses AlexMAN.

Jarod_Delaware