Fichier texte a partir de tableau (C)
Résolu
mich62120
Messages postés
636
Statut
Membre
-
mich62120 Messages postés 636 Statut Membre -
mich62120 Messages postés 636 Statut Membre -
Bonjour,
Je souhaiterai remplir un fichier texte avec des valeurs comprises dans un tableau deux dimensions.
Voici mon scripte:
#include <stdio.h>
/*void remplirBDD();*/
int main(){
int i;
/*remplirBDD();*/
FILE* file;
char filename[256];
int tab[25][2];
int tmp;
/*remplissage bidon*/
for(tmp=0 ; tmp<25 ; i++ ){
tab[tmp][1]=tmp;
tab[tmp][2]=tmp*5;}
sprintf((char *) &filename,"create.txt");
for( i=0 ; i<25 ; i++ )
{
file = fopen(filename,"a");
if (file) fprintf(file,"%d %d\n",tab[i][1],tab[i+1][2]);
else fprintf(stderr,"Erreur : ne peut pas ouvrir %s\n",filename);
fclose(file);
}
return 1;}
A chaque execution j'ai une fenete DOS qui s'ouvre (ou je peux strictement rien faire )et cela reste bloqué.Le fichier ne se crée même pas.
Je ne vois pas du tout d'ou peut venir le problème si vous pouvez m'aider
Je souhaiterai remplir un fichier texte avec des valeurs comprises dans un tableau deux dimensions.
Voici mon scripte:
#include <stdio.h>
/*void remplirBDD();*/
int main(){
int i;
/*remplirBDD();*/
FILE* file;
char filename[256];
int tab[25][2];
int tmp;
/*remplissage bidon*/
for(tmp=0 ; tmp<25 ; i++ ){
tab[tmp][1]=tmp;
tab[tmp][2]=tmp*5;}
sprintf((char *) &filename,"create.txt");
for( i=0 ; i<25 ; i++ )
{
file = fopen(filename,"a");
if (file) fprintf(file,"%d %d\n",tab[i][1],tab[i+1][2]);
else fprintf(stderr,"Erreur : ne peut pas ouvrir %s\n",filename);
fclose(file);
}
return 1;}
A chaque execution j'ai une fenete DOS qui s'ouvre (ou je peux strictement rien faire )et cela reste bloqué.Le fichier ne se crée même pas.
Je ne vois pas du tout d'ou peut venir le problème si vous pouvez m'aider
Configuration: Windows XP Internet Explorer 6.0
4 réponses
-
Ce sprintf() ne peut que planter :
sprintf((char *) &filename,"create.txt");
écris plutôt : strcat( filename , "create.txt" );
Tu peux ouvrir ton fichier 1 seule fois avant la boucle for(), et le refermer 1 seule fois après cette même boucle
En C, les indices de tableau commencent à 0 et non à 1 (remarque)
Slts ! -
Bonjour,
En fait strcat plantera aussi dans ce cas à moins de mettre un '\0' en premier caractère dans filename, mais de toute façon ce n'est pas une concaténation que tu veux faire.
Le point fautif est le '&' dans ton sprintf, et c'est probablement pour cela que tu as du caster en (char *) car ton compilo se retrouve avec un char ** pour un paramètre de type char *.
Voilou.
Oui sinon, idem, ouvrir le fichier une seule fois en mode écriture (w), tout écrire, fermer.
et ++ aussi, un tableau de taille 2 (par exemple) possède deux éléments, a[0] et a[1];
M. -
meaculpa, il faut utiliser strcpy() et non strcat(), bien évidement !
sprintf() n'a aucun intérêt pour copier une chaîne. -
Merci pour votre aide j'ai corrigé les erreurs signalées et quelques autres erreurs d'inattention (i++ a lieu de tmp++ dans le for :$) et ca marche.
Bonne continuation.
MICH