comment j peux copier le contenue d un fichier dans un tableau de string merci
comment j peux copier le contenue d un fichier dans un tableau de string merci
Salut,
D'abord tu ouvres ton fichier => fopen
Ensuite tu le parcours => fscanf ou fgets
en l'enregistrant dans une chaine
Tu fermes le fichier => fclose
Typiquement :
Cordialement. Pas de commentaire pour que tu réfléchisses un peu ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 void file_close(FILE *p) { if( fclose(p) != 0 ) { fprintf(stderr,"file_close ; FILE@%d ; CODERR : %s\n", p, strerror(perror)); p=NULL; } else fclose(p); } FILE *file_open(char *p, const char *r) { FILE *f = NULL; if ( (f=fopen(p,r)) == NULL ) { fprintf(stderr,"file_open(\"%s\",\"%s\") ; CODERR : %s\n", p, r, strerror(perror)); return NULL; } return f; } unsigned int file_count_character( char *p ) { char c; unsigned int l = 0; FILE *f = file_open(p,"r"); while( fscanf(f,"%c",&c) != EOF ) l++; file_close(f); return l; } char *file_to_string(char *p) // p le chemin du fichier { char c; unsigned int i = 0; char *s = allocate_1D_char_ptr( file_count_character(p)*sizeof(char) ); FILE *f = file_open(p,"r"); while( fscanf(f,"%c",&c) != EOF ) { s[i] = c; i++; } file_close(f); return s; }
EDIT : Au passage, avant que tu te fasses réprimander plus durement, la base quand on demande de l'aide, c'est Bonjour;s'il vous plait;Merci; +orthographe.
UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :
Euh, pourquoi la première chaîne n'est-elle pas const?
Code C : Sélectionner tout - Visualiser dans une fenêtre à part FILE *file_open(char *p, const char *r)
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Bonjour,
Le code proposé par darkwall_37 est correct, bien que, à la ligne 10, on a un comportement dangereux (sûrement une faute de frappe, ou quelque chose dans le genre), car tu essaies de fermer une seconde fois le fichier. En outre, la ligne 7 (affectation de NULL à p) est au passage inutile car on agit sur une variable locale. Du point de vue de la stratégie globale, je ne suis pas fanatique des lectures de fichier à plusieurs reprises (d'autant plus que, dans le code proposé, le fichier est ouvert puis parcouru deux fois, ce qui n'est pas un algorithme très efficace).
D'ailleurs, tout dépend de ce qu'on cherche à en faire ensuite, mais une bonne idée serait d'utiliser une liste chaînée pour lire le fichier en entier, ligne par ligne (un peu comme l'éditeur de texte ed). L'avantage est qu'on a une structure de donnée flexible, qui ne nécessite qu'une taille plafond pour une ligne si on veut faire un peu de statique (il existe notamment une macroconstante POSIX pour faire cela, c'est donc assez simple). L'inconvénient est que l'accès aléatoire est catastrophique, mais, en pratique, c'est finalement plutôt rare d'en avoir besoin sur un fichier (ou alors, on a déjà des tailles plafonds car ce sont des formats de fichier bien définis). En fait, je crois qu'on manque d'informations sur le problème.
Bonne journée.
Récursivité en C : épidémie ou hérésie ?
"Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager