Prb de stockage fichier texte

Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 - 2 mai 2005 à 18:52
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 - 3 mai 2005 à 11:01
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

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

+2(p - n)
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
2 mai 2005 à 21:56
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...
0
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
3 mai 2005 à 09:00
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
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
3 mai 2005 à 09:08
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)
0

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

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
3 mai 2005 à 09:10
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)
0
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
3 mai 2005 à 11:01
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
0
Rejoignez-nous