Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème d'allocation de tableau

2 réponses
Avatar
Rim msedi
Bonsoir,

Je voulais copier le contenu de fichier "exemple.txt" dans un tableau
dynamique tab de taille inconnue en avance. J'utilise le tableau pour
faciliter la manipulation apr=E8s.
Chaque ligne de fichier contient une chaine de caract=E8re :
nom
prenom
age
adresse
emploi

Voici le programme:
Code :


int allocation(int N)
{
FILE *fp;
char *t,s[100],attribut[32];
int i;

t =3D (char *) malloc((N)*sizeof(char));
fp=3Dfopen("exemple.txt","r");

for(i=3D0; i < N;i++)
{
fgets(s, 100, fpNS);
sscanf(s,"%s",attribut);
strcpy(t[i],attribut);
printf("%s ",t[i]);
}

fclose(fp);
return 0;
}

int main ()
{
FILE *fp;
char s[100];
int N=3D0;
//N est calculer : c'est le nombre des lignes de fichier
"attribut.txt" puisque chaque ligne de ce fichier contient un attribut
qui est l'objet de la combinaison
while (fegts(s,100,fp))!=3DNULL)
N++;
allocation(N);
fclose(fp);
return 0;
}


J'ai remarqu=E9 que le probl=E8me d=E9clenche juste apr=E8s l'ouverture de
fichier "attribut.txt" dans la fonction allocation(N).
Comment on r=E9soudre ce probl=E8me ?

Je serais tr=E8s reconnaissant pour vos aides.

Merci.

2 réponses

Avatar
Rim msedi
Bonsoir,

J'ai modifié un peu le programme :

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int allocation(int N)
{
FILE *fp;
char *t,s[100],attribut[32];
int i;

t = (char *) malloc((N)*sizeof(char));
fp=fopen("exemple.txt","r");

for(i=0; i < N;i++)
{
fgets(s, 100, fp);
sscanf(s,"%s",attribut);
strcpy(t[i],attribut);
printf("%s ",t[i]);
}

fclose(fp);
return 0;
}

int main ()
{
FILE *fp = NULL;
char s[100];
int N=0;
//N est calculer : c'est le nombre des lignes de fichier
"attribut.txt" puisque chaque ligne de ce fichier contient un attribut
qui est l'objet de la combinaison
while (fgets(s,100,fp)!= NULL)
N++;
allocation(N);
fclose(fp);
return 0;
}
Avatar
Christian ASTOR
On 22 août, 20:14, Rim msedi wrote:
Bonsoir,

J'ai modifié un peu le programme :



Pas bon.
Si on alloue une seule fois, on lit dans &t[i].
La méthode plus classique est avec 2 mallocs (tableau + pour chaque
éléments) => 1er exemple "Arrays of strings" :
http://www.cs.cornell.edu/courses/cs113/2007fa/Lectures/L08cs113fa07-6up.pd f