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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NOMBRE_CARACTERES_PAR_LIGNE_MAX 100
typedef enum
{
CODE_ERREUR_SUCCES = 0,
CODE_ERREUR_ECHEC = 1,
}CodeErreur;
int allocation(int N)
{
CodeErreur codeErreur = CODE_ERREUR_ECHEC;
char** t = (char**) malloc(N * sizeof (*t));
if (t)
{
FILE* fp = fopen("exemple.txt", "r");
if (fp)
{
char s[NOMBRE_CARACTERES_PAR_LIGNE_MAX];
char attribut[NOMBRE_CARACTERES_PAR_LIGNE_MAX];
int i;
int j;
//copier le contenu du fichier dans le tableau
for (i = 0; i < N; i ++)
{
if (fgets(s, NOMBRE_CARACTERES_PAR_LIGNE_MAX, fp))
{
if (sscanf(s, "%s", attribut) > 0)
{
t[i] = strdup(attribut);
if (t[i])
{
printf("%s\n", t[i]);
}
else
{
fprintf(stderr, "Pas assez de memoire disponible pour dupliquer la chaine.\n");
goto LIBERATION_MEMOIRE;
}
}
else
{
fprintf(stderr, "Echec de sscanf().\n");
goto LIBERATION_MEMOIRE;
}
}
else
{
fprintf(stderr, "Echec de fgets().\n");
goto LIBERATION_MEMOIRE;
}
}
//afficher le contenu de tableau
for (j = 0; j < N; j ++)
{
printf("j = %d, s = %s\n", j, t[j]);
}
codeErreur = CODE_ERREUR_SUCCES;
LIBERATION_MEMOIRE:
for (; i >= 0; i --)
{
free(t[i]);
}
fclose(fp);
}
else
{
fprintf(stderr, "impossible d'ouvrir le fichier\n");
}
free(t);
}
else
{
fprintf(stderr, "probleme d'allocation\n");
}
return codeErreur;
}
int main(int argc, char* argv[])
{
switch (allocation(5))
{
case CODE_ERREUR_SUCCES:
printf("Succes de allocation()\n");
break;
case CODE_ERREUR_ECHEC:
printf("Echec de allocation()\n");
break;
default:
printf("allocation() a retourne un code d'erreur inconnu.\n");
}
return 0;
} |
Partager