49 votes

La bonne façon de vider une C-String

Je travaille sur un projet en C qui m'oblige à manipuler beaucoup de chaînes de caractères. Normalement, je programme en C++, donc c'est un peu différent que de dire simplement string.empty().

Je me demande quelle serait la bonne façon de vider une chaîne de caractères en C. Est-ce que ce serait ça ?

buffer\[80\] = "Hello World!\\n";

// ...

strcpy(buffer, "");

105voto

Mysticial Points 180300

Cela dépend de ce que vous entendez par "vide". Si vous voulez simplement une chaîne de longueur nulle, alors votre exemple fonctionnera.

Cela fonctionnera également :

buffer[0] = '\0';

Si vous voulez mettre à zéro le contenu entier de la chaîne, vous pouvez le faire de cette façon :

memset(buffer,0,strlen(buffer));

mais cela ne fonctionnera que pour la mise à zéro jusqu'au premier caractère NULL.

Si la chaîne est un tableau statique, vous pouvez utiliser :

memset(buffer,0,sizeof(buffer));

4voto

Aiyion.Prime Points 689

Deux autres moyens sont strcpy(str, ""); y string[0] = 0

Pour vraiment effacer le contenu de la variable (au cas où vous avez un code sale qui ne fonctionne pas correctement avec les extraits ci-dessus :P ) utilisez une boucle comme dans l'exemple ci-dessous.

#include <string.h>

...

int i=0;
for(i=0;i<strlen(string);i++)
{
    string[i] = 0;
}

Dans le cas où vous voulez effacer un tableau de caractères alloué dynamiquement depuis le début, vous pouvez soit utiliser une combinaison de malloc() et memset() ou - et c'est beaucoup plus rapide - calloc() qui fait la même chose que malloc mais en initialisant le tableau entier avec Null.

Enfin, je veux que vous ayez à l'esprit votre temps d'exécution. De plus, si vous manipulez d'énormes tableaux (6 chiffres et plus), vous devriez essayer de mettre la première valeur à Null au lieu de lancer memset() à travers toute la chaîne.

Cela peut sembler plus sale au début, mais c'est beaucoup plus rapide. Vous devez juste faire plus attention à votre code ;)

J'espère que cela a été utile pour tout le monde ;)

1voto

Ben Ruijl Points 1831

Ça dépend de ce que vous entendez par vider. Si vous voulez juste une chaîne vide, vous pouvez faire

buffer[0] = 0;

Si vous voulez mettre tous les éléments à zéro, procédez comme suit

memset(buffer, 0, 80);

1voto

Dave Tobias Points 11

Si vous essayez de vider un tampon de réception pour quelque chose qui reçoit des chaînes de caractères, j'ai trouvé que la meilleure façon est d'utiliser memset comme décrit ci-dessus. La raison en est que quelle que soit la taille de la prochaine chaîne reçue (limitée à sizeof buffer bien sûr), elle sera automatiquement une chaîne asciiz si elle est écrite dans un tampon qui a été pré-zéroisé.

0voto

Eesh Kumar Points 9

Je suis un débutant mais... A ma connaissance, le meilleur moyen est de

strncpy(dest_string,"",strlen(dest_string));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X