Fichier texte a partir de tableau (C)

Résolu/Fermé
mich62120 Messages postés 631 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 janvier 2010 - 18 févr. 2008 à 16:59
mich62120 Messages postés 631 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 janvier 2010 - 19 févr. 2008 à 13:01
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
A voir également:

4 réponses

tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 120
18 févr. 2008 à 18:41
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 lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 125
18 févr. 2008 à 18:52
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 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 120
18 févr. 2008 à 18:54
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 jeudi 22 novembre 2007 Statut Membre Dernière intervention 21 janvier 2010 6
19 févr. 2008 à 13:01
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