Probleme d'allocation dynamique en c

Fermé
gregoiredys Messages postés 2 Date d'inscription mercredi 15 septembre 2010 Statut Membre Dernière intervention 15 septembre 2010 - 15 sept. 2010 à 11:40
gregoiredys Messages postés 2 Date d'inscription mercredi 15 septembre 2010 Statut Membre Dernière intervention 15 septembre 2010 - 15 sept. 2010 à 13:52
Bonjour,
j'ai créer une fonction qui ajoute une ligne a la suite d'un autre dans un fichier.
J'émerai que le tableau de chaine ligne soi allouer dynamiquement.
J'ai déjà tenté le cous mais mon code devenais incompréhensible donc je préfaire montrer celui si :
void ajouter_ligne_fichier(FILE *fichier2, char *ligne_a_rechercher, char *ligne_a_coller_a_la_suite_de_ligne_a_rechercher)
{
 
    char chaine[100000] = "";
    char sautligne[10000] = "\n";
 
    char   *ligne[10000];// tableau de chaine pour acceuillir tout les lignes du fichier plus les nouvelle qu'on ajoute
    long i2= 0;
 
    strcat(ligne_a_coller_a_la_suite_de_ligne_a_rechercher ,sautligne); // On concatène chaine2 dans chaine1
 
 
    if (fichier2 != NULL)
    {
        while (fgets(chaine, 100000, fichier2) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
        {
 
 
            if (strcmp(chaine, ligne_a_rechercher) == 0) // Si la ligne a rechedcher correspond a la ligne actuel du fichier
            {
                ligne[i2]=strdup(chaine);// on ajoute la ligne du fichier dans ligne
                i2++;// on ajoute aussi a la suite la nouvelle migne qu'on souhaitre introduire
                ligne[i2]=strdup(ligne_a_coller_a_la_suite_de_ligne_a_rechercher);
 
            }
            else
            {
 
                ligne[i2]=strdup(chaine);// on ajoute juste la ligne du fichier dans ligne
 
 
            }
 
 
            i2++;
 
 
 
        }
 
        fclose(fichier2);
    }
 
// pour évitter d'avoir a créer un fichier tempon je redéclare le même fichier sous un autre nom
    FILE* fichier3 =NULL;
    fichier3 = fopen("codesource.txt","w");
 
 
 
 
 
// on remplasse tout le contenu du fichier par ligne
 
 
    if (fichier3 != NULL)
    {
 
 
        long i=0;
 
        while (i!=i2)
        {
            fseek(fichier3, 0, SEEK_END);
            // On l'écrit dans le fichier
            fprintf(fichier3, "%s", ligne[i]);
            i++;
        }
 
        fclose(fichier3);
    }
 
}






2 réponses

Neliel Messages postés 6146 Date d'inscription jeudi 9 juillet 2009 Statut Contributeur Dernière intervention 20 mars 2017 1 688
Modifié par Neliel le 15/09/2010 à 11:50
Bonjour,

Pour allouer dynamiquement de la mémoire à une variable, tu dois utiliser l'instruction malloc.

prototype:

<pointeur> = (<type *>)malloc(<nombre_element > * sizeof(<type> ))

Attention, chaque type prend différemment de l'espace dans la mémoire... ainsi un char prend un octet donc imaginons qu'on veuille faire un tableau de 10 entiers, cela donne:

char * var1;

var1 = (char *)malloc(10 * sizeof(char));

En statique, c'est équivalent à : char var1[10];



"Trotti Trotta, Monsieur P, il y a des anges qui veulent un bisou..."
"Même les joujou de Monsieur P ont besoin de joujou"
0
gregoiredys Messages postés 2 Date d'inscription mercredi 15 septembre 2010 Statut Membre Dernière intervention 15 septembre 2010
15 sept. 2010 à 13:52
Sa serai possible qu'on corrige directement le code ma fonction ?
j'ai déjà lus des chose sur l'allocation dynamique mais je mélange tout a la rigueur quant ses juste avec des chiffre j'y arrive.
Mais la j'utilise un tableau de chaine et j'utilise déjà une boucle,dans la plus par des tuto sur l'allocation dynamique on utilise une boucle avec un i alors que mon tableau utilise déjà un autre i et une boucle qui ne sont pas destiner à l'allocation.
J'ai déjà tenté le cou plusieurs fois de modifier ma fonction mais a chaque fois je mélange tout.
Si vous insisté je peut montrer le code d'une des mes nombreuse tentative mais sa devient incompréhensible.




0