copie d'un pointeur de chaîne
J'ai une fonction qui a une entrée et pointeur vers un tableau de caractères en C. dans cette fonction je suis de la manipulation de la chaîne principale, cependant je veux faire une copie de sauvegarde dans une autre variable avant de l'utiliser. Je veux le mettre dans le char de sauvegarde[2000], de sorte que si le pointeur se transforme en la sauvegarde ne changera pas.
Comment puis-je le faire?
merci de poster votre code
Rechercher un appel de fonction strncpy.
Balter: Qu'advient-il si la chaîne n'est pas null?
Alors ce n'est pas une chaîne. Si c'est juste un tableau d'octets, l'OP doit connaître sa longueur, et peut tout simplement utiliser memcpy(tampon, mem, len) (après avoir vérifié que len <= sizeof(buffer)).
Rechercher un appel de fonction strncpy.
strncpy
est une abomination. L'approche correcte consiste à utiliser strlen sur la chaîne pour être sûr elle s'inscrit dans la mémoire tampon, puis à utiliser la fonction strcpy(buffer, string) ou memcpy(tampon, corde, len+1) (ce dernier est plus rapide sur de nombreuses architectures).Balter: Qu'advient-il si la chaîne n'est pas null?
Alors ce n'est pas une chaîne. Si c'est juste un tableau d'octets, l'OP doit connaître sa longueur, et peut tout simplement utiliser memcpy(tampon, mem, len) (après avoir vérifié que len <= sizeof(buffer)).
OriginalL'auteur Syntax_Error | 2011-03-23
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur wallyk
Pour dupliquer les chaînes de caractères en C il n'y est une fonction de la bibliothèque appelée
strdup
fait pour ça:La mémoire allouée par
strdup
doit être libéré après utilisation à l'aide defree
.strdup
prévoit l'allocation de la mémoire et de la chaîne de l'opération de copie en une seule étape. À l'aide d'un tableau de char peut devenir problématique si, à un certain point dans le temps la chaîne de copie se trouve être plus grand que la taille du tableau.Ok, mais c'est peut-être une meilleure alternative qu'il ne pense pas que si il est déjà demandé pour quelque chose d'aussi fondamental que la copie d'une chaîne de caractères. La accepté de répondre à fait la même chose.
L'OP n'est même pas de C des couches et n'a aucune idée de quelle solution est la meilleure. C'est une règle fondamentale que vous devez savoir: les demandes de solutions consistent souvent prématuré de la conception, plutôt que des obligations. Assurez-vous toujours que le client fournit à ce dernier, pas l'ancien.
P. S. L'OP accepté une réponse qui utilise malloc et strcpy, équivalent à strdup. Cela devrait vous dire quelque chose.
OriginalL'auteur jdehaan
Vos amis sont les fonctions suivantes
Mais le meilleur de tous, le plus grand ami est homme 🙂
OriginalL'auteur jibril
Utiliser strncpy().
Copie 1999 caractères de l'an 2000) tableau de caractères laisse le dernier caractère pour le terminateur null.
backup[1999]
à 0 quelque part.Si la longueur de
inputstr
est inférieure à 1999 puisstrncpy
sera pavé de labackup
chaîne avec des valeurs null. Mais bon point... ont modifié pour afficher la configuration de terminateur null pour le cas où la longueur >= 1999.strncpy est une abomination. Ne recommandons jamais, du moins pas sans un hôte de caviats. Que votre code d'origine a été buggy était prévisible, tout comme le fait que votre édité code claque de la mémoire avec de nombreuses inutiles NUL magasins. Aussi, vous êtes à la stocker dans la mémoire locale, puis de le jeter -- assez inutile. Et vous avez trois copies d'une constante lorsque vous devez avoir un seul (google SEC). Ce sont tous des pauvres, des pratiques non professionnelles.
OriginalL'auteur Andy Johnson
Vous pouvez utiliser strcpy pour faire une copie de votre char array (string) avant de vous commencer à modifier.
OriginalL'auteur Argote
Utilisation memcpy pour créer la sauvegarde.
strlen(original) > 1999
, et ces trois instances de "2000" sont une mauvaise pratique.l'exemple est destiné à montrer l'idée...pas de production digne de code
Les réponses que l'utilisation de ces mauvaises pratiques sont de mauvaises réponses.
OriginalL'auteur eat_a_lemon
strcpy de référence.
Note de lien.
OriginalL'auteur Mahesh