Le résultat que tu cherches à obtenir est-il celui là:
DLL:
#define STR_PREFIXE "prefixe"
char* mafonction(const char* inStr) { // Taille de la chaine finale int tailleStr=strlen(inStr) + strlen(STR_PREFIXE) + 1;
// Allocation char* outStr=new char [tailleStr];
strcpy(outStr, STR_PREXIFE); strcat(outStr, inStr);
return outStr; }
|
Programme de test:
char* inStr="chaine sans prefixe"; char* outStr=mafonction(inStr);
cout << outStr << endl;
// ...
delete [] outStr;
|
Kaid -
kaid.fr.st-------------------------------
Réponse au message :
-------------------------------
> Au faite entre temps j'ai trouvé.
> Mais j'ai un mal fou a comprendre car selon mon exemple :
> Aidez moi a comprendre (au bout il y a sûrement la lumière)
>
> char *string="free"; // ici on alloue une adresse soit, mais l'adresse de qui
> len = strlen(string); //Ici la longueur est de 4
> cout << string << endl; //print le contenu de string (free)
> cout << len << endl; //print le contenu de len soit 4
> system("PAUSE");
>
> string = (char*) malloc( 1 ); Ici on rajoute 1 à la longueur
> len =strlen(string);// Ici la longueur est de 5
> cout << string << endl; // Mais ici c'est n'importe quoi comme txt
> cout << len << endl; //Ici la longueur est de 5
> system("PAUSE");
>
> free((char*)string); // Ici on libere mais quoi
> len =strlen(string);// L'espace reserve est toujours de 5
> cout << string << endl;// Ici on voit que les caractères sont identique
> cout << len << endl; Ici la longueur est de 5
> system("PAUSE");
>
> string = (char *)calloc( 1, sizeof( char ) );// Ici la reservation memoire disparaît
> len =strlen(string); );// L'espace réserve est à 0
>
> cout << string << endl; il y a plus rien
> cout << len << endl;
> system("PAUSE");
>
> Résumer je ne vois très bien a quoi cela sert à reformater la mémoire j'imagine que tous les octet passe à 0.
>
> On peut simplement remplacer par d'autre valeur. Mais ou j'ai loupé qlq chose ou ?? mais la mémoire reste alloué à la variable après free()
>
> Voilà une réponse qui me met dans cette etat.
> > Si la dll doit retourner un ptr de chaine faisant concat de ce qu'elle reçoit + ce qu'elle ajoute, faudra allouer la memoire dans la dll pour garantir la longueur necessaire au chainage.
> > La dll retourne un char* que le prog affiche et ensuite fait le free(ptr).
> > BruNews, ciao...
> -------------------------------
> Réponse au message :
> -------------------------------
> > Question au Pro?
> > Qu'es qui est faux docteur
> > Arrivé à free ça bombe
> >
> > #include <iostream.h> > > #include <stdlib.h> > > #include <malloc.h> > > > > > > void main(int argc, char* argv[]) > > { > > char *string="free"; > > cout << string << endl; > > system("PAUSE"); // ici tout est OK > > > > free((char*)string);// Arrivé ici ça merde > > > > cout << "Bravo ça marche" << endl; > > > > cout << string << endl; > > > > system("PAUSE"); > > } > > |
>