Comment vider un tableau de caractères?

Avoir un tableau de caractères comme les membres char [255]. Comment puis-je le vider complètement sans utiliser de boucle?

char members[255]; 

Par “vide”, je veux dire que si certaines valeurs étaient stockées, elles ne le seraient pas. Par exemple, si je fais du strcat, l’ancienne valeur ne doit pas restr

 members = "old value"; //empty it efficiently strcat(members,"new"); // should return only new and not "old value new" 

en utilisant

  memset(members, 0, 255); 

en général

  memset(members, 0, sizeof members); 

si le tableau est dans la scope, ou

  memset(members, 0, nMembers * (sizeof members[0]) ); 

Si vous avez uniquement la valeur du pointeur et que nMembers est le nombre d’éléments du tableau.


EDIT Bien sûr, la tâche générique consistant à effacer un tableau ne nécessite plus que la réinitialisation d’une chaîne, memset est excessif et la remise à zéro du premier élément suffit (comme indiqué dans d’autres réponses).


EDIT Pour utiliser memset , vous devez inclure ssortingng.h .

Dépend de ce que vous entendez par “vide”:

 members[0] = '\0'; 

membres de char [255] = {0};

EDIT: Étant donné la modification la plus récente à la question, cela ne fonctionnera plus car il n’y a pas de terminaison null – si vous tentiez d’imprimer le tableau, vous obtiendriez vos caractères suivis d’un certain nombre de caractères non lisibles par l’homme. Cependant, je laisse cette réponse ici en tant que wiki communautaire pour la postérité.

 char members[255] = { 0 }; 

Cela devrait fonctionner. Selon le langage de programmation C:

Si le tableau a une taille fixe, le nombre d’initialisateurs ne doit pas dépasser le nombre de membres du tableau; s’il y en a moins, les membres restants sont initialisés avec 0.

Cela signifie que chaque élément du tableau aura une valeur de 0. Je ne suis pas sûr que ce soit ce que vous considéreriez comme “vide” ou non, car 0 est une valeur valide pour un caractère.

Vous ne pouvez pas vider un tableau en tant que tel, il contient toujours la même quantité de données.

Dans un contexte plus large, les données du tableau peuvent représenter une liste d’éléments vide, mais cela doit être défini en plus du tableau. La façon la plus courante de le faire est de garder un nombre d’éléments valides (voir la réponse par pmg) ou de les terminer avec un caractère zéro (la réponse de Felix). Il existe également des moyens plus compliqués, par exemple un tampon en anneau utilise deux index pour les positions où les données sont ajoutées et supprimées.

N’essayez pas de mettre à zéro votre tableau de caractères si vous utilisez des chaînes. Voici un moyen simple de travailler avec les chaînes de caractères.

Copier (atsortingbuer une nouvelle chaîne):

 strcpy(members, "hello"); 

Concaténer (append la chaîne):

 strcat(members, " world"); 

Chaîne vide:

 members[0] = 0; 

Aussi simple que ça.

J’irais avec

 members_in_use = 0; 
 members[0] = 0; 

est suffisant, compte tenu de vos exigences.

Notez toutefois que cela ne “vide” pas le tampon. La mémoire est toujours allouée, des valeurs de caractères valides peuvent toujours exister, etc.

Utilisez bzero(array name, no.of bytes to be cleared);

plus simple est mieux – a du sens?

dans ce cas, juste les membres [0] = 0 fonctionne. ne faites pas une simple question si compliquée.

Par “vider un tableau” si vous voulez dire réinitialiser à 0, vous pouvez utiliser bzero.

 #include  void bzero(void *s, size_t n); 

Si vous voulez remplir le tableau avec un autre caractère par défaut, vous pouvez utiliser la fonction memset.

 #include  void *memset(void *s, int c, size_t n); 

Disclaimer: Je ne programme généralement pas en C, donc il peut y avoir une syntaxe gotcha dans mes exemples, mais j’espère que les idées que j’essaie d’exprimer sont claires.

Si “Videing” signifie “contenant une chaîne vide”, vous pouvez simplement affecter le premier élément du tableau à zéro, ce qui fera que le tableau contiendra une chaîne empry:

 members[0] = 0; 

Si “vide” signifie “libérer la mémoire utilisée”, vous ne devez pas utiliser un tableau de caractères fixe en premier lieu. Vous devez plutôt définir un pointeur sur char, puis faire un malloc / free (ou une assignation de chaîne), selon le cas.

Un exemple utilisant uniquement des chaînes statiques:

 char* emptySsortingng=""; char* members; //Set ssortingng value members = "old value"; //Empty ssortingng value member = emptySsortingng //Will return just "new" strcat(members,"new"); 

Vous pouvez utiliser l’instruction suivante:

 strcpy_s(members, "");