Copie char * en c
hoff
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai 2 char * s et ss, s est donné par une fonction dont on sait juste qu'elle retourne l'adresse d'un char *
j'utilise strcpy (y a t il mieux dans ce cas ???)
pour l'initialisation de ss, je recupere la taille avec strlen, dois-je multiplier la taille par 4 pour l'allocation ?
j'ai 2 char * s et ss, s est donné par une fonction dont on sait juste qu'elle retourne l'adresse d'un char *
j'utilise strcpy (y a t il mieux dans ce cas ???)
pour l'initialisation de ss, je recupere la taille avec strlen, dois-je multiplier la taille par 4 pour l'allocation ?
A voir également:
- Copie char * en c
- Copie cachée - Guide
- Super copie - Télécharger - Gestion de fichiers
- Copie écran samsung - Guide
- Copie disque dur - Guide
- Copie rapide - Télécharger - Gestion de fichiers
3 réponses
j'utilise strcpy (y a t il mieux dans ce cas ???)
très bien. C'est fait exactement pour ça.
pour l'initialisation de ss, je recupere la taille avec strlen, dois-je multiplier la taille par 4 pour l'allocation ?
ne suppose jamais que les type de donnée ont une certaine valeur fixe !
Il faudrait en effet multiplier, mais par sizeof(char). Dans le cas particulier du char je crois mais je ne suis pas sûr qu'il n'y a pas besoin de multiplier. Ceci dit c'est quand même plus clair, à mon avis, avec le *sizeof(char).
Enfin, attention, n'oublie pas de laisser une place au caractère 0 de fin de chaine... Il n'est pas compté dans strlen si mes souvenirs sont bons ! (à vérifier)
Enfin, attention, n'oublie pas de laisser une place au caractère 0 de fin de chaine... Il n'est pas compté dans strlen si mes souvenirs sont bons ! (à vérifier)
Effectivement mais c'est même pire que ça. strlen copie jusqu'au \0 sans se poser de question.
C'est pour ça qu'il vaut mieux utiliser strncpy et poser manuellement le \0 en fin de chaîne.
Cdlt
Effectivement mais c'est même pire que ça. strlen copie jusqu'au \0 sans se poser de question.
C'est pour ça qu'il vaut mieux utiliser strncpy et poser manuellement le \0 en fin de chaîne.
Cdlt
sizeof(char) = 1 puisqu'un char est un byte (au moins 8 bits).
Au choix du programmeur de le mettre. Vraiment une question d'habitude.
char *ss=fct(...); peut suffit si la fonction se charge d'allouer la zone dans le heap.
Tu peux aussi allouer le buffer avant d'appeler la fonction. Et la fonction remplira le buffer à passer en paramètre.
N'oublie pas de vider la zone allouée via free.
Pour strcpy, je te conseille de l'oublier et de plutôt utiliser strncpy. Cela te permet de contrôler la taille et d'éviter des buffer overflows.
Cdlt
Au choix du programmeur de le mettre. Vraiment une question d'habitude.
char *ss=fct(...); peut suffit si la fonction se charge d'allouer la zone dans le heap.
Tu peux aussi allouer le buffer avant d'appeler la fonction. Et la fonction remplira le buffer à passer en paramètre.
N'oublie pas de vider la zone allouée via free.
Pour strcpy, je te conseille de l'oublier et de plutôt utiliser strncpy. Cela te permet de contrôler la taille et d'éviter des buffer overflows.
Cdlt