• [^] # Re: Les tableaux c'est pas beau...

    Posté par . En réponse au message Tableau dynamique de pointeur vers char. Évalué à 0.

    je crois que j'ai plus ou moins compris ce que tu voulais dire thomas.

    Je connais pas la technique buffer-Overflow mais je vais me renseigner la dessus le code fonctionne mais maintenant il me renvoie segmentation fault quand il y a plus de 19 mots dans la liste j'y comprends rien...



    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>


    int main(void)
    {

    /* Ouverture du fichier de configuration pour y récupérer la liste de processus */
    FILE *fp;

    if ((fp = fopen("proc_liste.conf", "r")) == NULL)
    {
    fprintf(stderr, "\nErreur à l'ouverture du fichier");
    exit(1);
    }


    /* Lecture du contenu du fichier caractà ̈re par caractà ̈re et stockage en mémoire du fichier */
    char now[2] = "a";
    char prec = '0円';
    char **message;
    long count = -1;

    message = (char **)calloc(1, sizeof(char *));

    while ((now[0] = fgetc(fp)) != EOF)
    {

    /* Vérifie si c'est un nouveau mot pour stocker, sinon complete le mot avec la nouvelle lettre */
    if (isalnum(now[0]) != 0 && isalnum(prec) == 0)
    {
    count++;
    if (count > 0)
    message = (char **)realloc(message, (count + 1) * sizeof(char *));

    message[count] = malloc(sizeof(char) * 2);
    strcat (message[count], now);
    }
    else if (isalnum(now[0]) != 0 && isalnum(prec) != 0)
    {
    message[count] = realloc(message[count], (strlen(message[count]) + strlen(now) + 1));
    strcat (message[count], now);
    }
    prec = now[0];

    }

    /* affichage du fichier maintenant contenu en mémoire */
    long e;
    for (e = 1; e <= count; e++)
    puts(message[e]);

    /* liberer la mémoire utilisée */
    long i;
    for (i = 0; i <= count; i++)
    free(message[i]);

    fclose(fp);
    return(0);
    }


    quand il y a que 19 mot dans le fichier ça fonctionne plus le prog me fait des problemes.