Fichier texte a partir de tableau (C)

Résolu
mich62120 Messages postés 631 Date d'inscription   Statut Membre Dernière intervention   -  
mich62120 Messages postés 631 Date d'inscription   Statut Membre Dernière intervention   -
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

4 réponses

tatou_38 Messages postés 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
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 !
0
Mahmah Messages postés 496 Date d'inscription   Statut Membre Dernière intervention   125
 
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.
0
tatou_38 Messages postés 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
meaculpa, il faut utiliser strcpy() et non strcat(), bien évidement !

sprintf() n'a aucun intérêt pour copier une chaîne.
0
mich62120 Messages postés 631 Date d'inscription   Statut Membre Dernière intervention   6
 
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
0