web-dev-qa-db-fra.com

Manière correcte de vider une chaîne de caractères

J'ai travaillé sur un projet en C qui nécessite beaucoup de ficelles. Normalement, je programme en C++, donc c'est un peu différent de simplement dire string.empty ().

Je me demande quelle serait la bonne façon de vider une chaîne de caractères en C. S'agirait-il de cela?

 buffer [80] = "Bonjour tout le monde!\n"; 

 // ..............
37
Benjamin

Cela dépend de ce que vous entendez par "vide". Si vous voulez juste une chaîne de longueur nulle, 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 comme suit:

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

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

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

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

strcpy(str, ""); et string[0] = 0 sont deux autres moyens

Pour réellement supprimer le contenu de la variable (au cas où vous auriez un code non conforme qui ne fonctionnerait 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;
}

Si vous souhaitez effacer un tableau alloué dynamique de caractères depuis le début, vous pouvez soit utiliser une combinaison de malloc () et de memset () ou - et c'est bien plus rapide - calloc () qui fait la même chose que malloc mais initialisation de tout le tableau avec Null.

Enfin, je veux que vous gardiez à l’esprit votre environnement d’exécution . De plus, si vous manipulez des tableaux énormes (6 chiffres et plus), vous devriez essayer de définir la première valeur sur Null au lieu de lancer memset () via la chaîne entière.

Cela peut paraître 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;)

2
Aiyion.Prime

Cela 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, faites

memset(buffer, 0, 80);
1
Ben Ruijl

a besoin du nom de la chaîne et de sa longueur mettra tous les caractères à zéro les autres méthodes peuvent s'arrêter au premier zéro qu'elles rencontrent

    void strClear(char p[],u8 len){u8 i=0; 
        if(len){while(i<len){p[i]=0;i++;}}
    }
0
Denes Borsos