• [^] # Re: strcpy

    Posté par . En réponse au message Structures.... Évalué à 5.

    c'est plutôt UNE des bonnes réponses de cette page!

    Faire un :
    char * titi = "polom polom";
    est tout à fait légal, permis et autorisé.

    Faire un :
    char * titi = (char*) malloc (50*sizeof(char));
    strncpy (titi, "polom polom", 50);
    //éviter le strcpy!!!
    ou un :
    char * titi = strdup ("polom polom"); //presque pareil qu'au dessus
    est encore légal, permis, autorisé.

    Lequel choisir alors? Eh bien ça dépend de ce qu'on va faire de titi...
    Si titi ne va être que lu, on peut utiliser la première méthode. Si titi va être écrit, il FAUT utiliser la seconde méthode (même pour remplacer un seul caractère sans rien rajouter à la fin).

    Et en C, une chaîne entre guillemets dans le source n'est pas stocké dans la pile mais dans le segment DATA du fichier objet.

    Et enfin, faire un :
    char * titi = (char*) malloc (50*sizeof(char));
    titi = "polom polom";

    est autorisé mais fortement déconseillé. Ça ne plantera pas, mais il y aura une fuite mémoire car la valeur renvoyée par le malloc est définitivement perdue avant qu'un free() soit fait. C'est pas bien, mais bon, 99% des programmes ont des fuites mémoire et elles se comptent plus en Ko qu'en dizaines d'octets... Enfin ce n'est pas parce que la majorité des programmeurs sont des sagouins que c'est une excuse pour en être un :-)