Bonjour,

Je vous explique mon soucis en deux mots. J'écris un programme en C qui écris des chaînes de caractères saisies par l'utilisateur dans un fichier.txt.

Je fais cela par un fputs. Mais lorsque je compile alors le compilateur de devC++ me dit :
invalid conversion from `void*' to `char (*)[100]'
Mais je croyais que normalement en C cela était possible.

Je vous donne le code de mon programme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
117
118
119
120
121
122
123
124
125
126
127
 
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
static void purger(void);
void fpurge(char *, FILE *);
 
 
int main (void)
{
 
int nombrefiches=0;
int end = 0;
char (*tab_fiches)[100] = NULL;
int err = EXIT_SUCCESS;
FILE* fichier = NULL;
 
printf("################## Programme de gestion de Fiches Personnes : ##################\n\n");
 
printf("Combien de Fiches personnes souhaitez-vous enregistrer ?\n\n");
scanf("%i",&nombrefiches);
 
purger();
 
printf("Vous allez donc enregistrer %i Fiches Personnes\n\n",nombrefiches);
 
printf("Si vous souhaitez rentrer moins de Fiches Personnes que prévu \nalors tapez 'mother fucker'\n\n");
system("pause");
 
printf("\n");
 
tab_fiches = malloc(nombrefiches * sizeof *tab_fiches); // Allocation de mémoire dynamique
 
    if (tab_fiches != NULL)
    {
        int i=1;
 
        /* Initialisation des n premiers octets du tableau p_tab avec le caractère 0*/
        memset(tab_fiches, '0', nombrefiches * sizeof (*tab_fiches));
 
        /* Saisie des chaines de caractère */
        for (i = 0; i < nombrefiches && end == 0; i++)
        {
            printf("Entrez la Fiche Personne n°%i :\n",i+1);
 
            fflush(stdout); // Vidage du tampon après chaque saisie
 
            if (fgets(tab_fiches[i+1], sizeof tab_fiches[i+1], stdin) != NULL)
            {
 
                fpurge(tab_fiches[i+1], stdin);
 
                if (strcmp(tab_fiches[i+1], "") == 0)
                {
                    *tab_fiches[i+1] = 0;
                    end = 1;
                }
            }
        }
 
printf("Ces fiches personnes vont maintenant être enregistrées dans votre fichier\n\n");
 
fichier = fopen("personnes.txt", "w");
 
        if (fichier != NULL)
        {
                    for (i = 0; i < nombrefiches && *tab_fiches[i+1] != 0; i++)
                    {    
                         fputs(tab_fiches[i+1], fichier);
                    }
        }
 
fclose(fichier);
 
printf("\n");
printf("Récapitulatif des Fiches Personnes enregistrées\n\n");
 
        /* Affichage des chaines saisies */
        for (i = 0; i < nombrefiches && *tab_fiches[i+1] != 0; i++)
        {
            printf("La fiche n°%i est :\n",i+1);
            puts(tab_fiches[i+1]);
        }
        /* Délestage de l'espace mémoire alloué */
        free(tab_fiches);
        tab_fiches = NULL;
    }
    else
    {
        fprintf(stderr, "Erreur d'allocation mémoire!\n");
        system("pause");
        err = EXIT_FAILURE;
    }
 
 
    system("pause");
    printf("\n");
    return err;
}
 
static void purger(void)   // Fonction qui gère le flux d'entrée standard (stdin)
{                          // car la première chaîne de caractère ne peut être lue.
    int c;                 // La cause venant de l'association des fonctions 
                           // scanf() et de fgets()
    while ((c = getchar()) != '\n' && c != EOF)
    {}
}
 
void fpurge(char *s_buff, FILE *fp)
{
    char *pc = strchr(s_buff, '\n');
 
    if (pc != NULL)
    {
        *pc = 0;
    }
    else
    {
        int c;
        while ((c = fgetc(fp)) != '\n' && c != EOF)
        {
            continue;
        }
    }
}
L'erreur se situe au niveau du malloc.