Concatenation

boss -  
 boss -
Bonjour,
J'essaye de concatener 2 chaine de caractères dans un tableau malloc mais j'ai un problème voici tout d'abord le code:
#include <stdio.h>
#include <stdlib.h>

int nbreCaractere(const char *chaine1);

int main()
{
    /* chaine */
    char *a = "SALUT";
    char *b = "Anthony";
    char *p = NULL;
    int nbre_a, nbre_b, resultat = 0, i, x;

    /* APPEL DE LA FONCTION */
    nbre_a = nbreCaractere(a);
    nbre_b = nbreCaractere(b);


    resultat = nbre_a + nbre_b;


    /* ALLOCATION */
    /*____________*/
    p = malloc(sizeof(p) * resultat);
    if(p == NULL)
    {
        puts("Vous avez pas assez de memoire");
        exit(0);
    }
    /*____________*/



    /* METTRE LES 2 CHAINE DANS LE MALLOC */
    /*____________________________________*/
    for(i = 0; a != '\0'; i++)
        p[i] = a[i];

    for(x = 0; b != '\0'; x++, i++)
    {
        p[i] = b[x];
    }

    p = '\0';
    /*____________________________________*/

    /* AFFICHAGE */
    /*___________*/
    printf("%s", p);
    /*___________*/
    return 0;
}

/* Calcul la taille des chaine */
int nbreCaractere(const char *chaine1)
{
    int cpt = 0;
    char nbreCaractere = 0;


    /*_______________*/
    /*On compte les caractères */
    while(cpt != '\0')
    {
        cpt = chaine1[nbreCaractere];
        nbreCaractere++;
    }
    /*_______________*/

    nbreCaractere--; /* onretire -1 pour la valeur nul '\0' */

    return nbreCaractere;

}

Dans le code il me dise que je n'ai pas assez de mémoire donc c'est que lors de la l'allocation la compilation rencontre un problème mais je ne trouve pas l'erreur dans le code

21 réponses

fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Je suis parti du premier code.

Et j'ai apporté les modifications pour qu'ils fonctionnent. J'ai juste tenu compte de toutes mes remarques dans mon premier post en fait.

Ce qui donne :
#include <stdio.h>
#include <stdlib.h>

int nbreCaractere(const char *chaine1);

int main(void)
{
    /* chaine */
    char *a = "SALUT";
    char *b = "Anthony";
    char *p = NULL;
    int nbre_a, nbre_b, resultat = 0;
    /* APPEL DE LA FONCTION */
    nbre_a = nbreCaractere(a);
    nbre_b = nbreCaractere(b);

    resultat = nbre_a + nbre_b;


    /* ALLOCATION */
    /*____________*/
    p = malloc(sizeof(*p) * (resultat+1));
    if(p == NULL)
    {
        puts("Vous avez pas assez de memoire");
        exit(0);
    }
    /*____________*/



    /* METTRE LES 2 CHAINE DANS LE MALLOC */
    /*____________________________________*/
    while((*(p++)=*(a++)));p--;

    while((*(p++)=*(b++)));p--;

    p-=resultat;
    /*____________________________________*/

    /* AFFICHAGE */
    /*___________*/
    printf("%s", p);
    fflush(stdout);
    free(p),p=NULL;
    /*___________*/
    return 0;
}

/* Calcul la taille des chaine */
int nbreCaractere(const char *chaine1)
{
    int nbreCaractere = 0;


    /*_______________*/
    /*On compte les caractères */
    while(chaine1[nbreCaractere] != '\0')
    {
        nbreCaractere++;
    }
    /*_______________*/


    return nbreCaractere;

}


Si t'as des questions, n'hésite pas.
Relis quand même le premier post, où j'avais détaillé les erreurs.

Cdlt,
0