web-dev-qa-db-fra.com

Comment vider un tableau de caractères?

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

char members[255];

Par "vide", je veux dire que si certaines valeurs y étaient stockées, il ne le devrait pas. Par exemple, si je ne strcat alors l'ancienne valeur ne devrait pas rester

members = "old value";

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

en utilisant

  memset(members, 0, 255);

en général

  memset(members, 0, sizeof members);

si le tableau est dans la portée, ou 

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

si vous avez seulement la valeur du pointeur, et nMembers est le nombre d'éléments dans le tableau.


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


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

126
Steve Gilham

Cela dépend de ce que vous entendez par 'vide':

members[0] = '\0';
30
Felix

membres char [255] = {0};

7
user44556

EDIT: Étant donné l'édition la plus récente de la question, cela ne fonctionnera plus car il n'y a pas de terminaison nulle. Si vous essayez d'imprimer le tableau, vos caractères seront suivis d'un certain nombre de caractères caractères lisibles. 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 la taille du tableau est fixe, le nombre d'initialiseurs ne peut 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 la valeur 0. Je ne sais pas si c'est ce que vous considéreriez comme "vide" ou non, car 0 est une valeur valide pour un char.

4
Thomas Owens

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 vaste, les données du tableau peuvent représenter une liste d’éléments vide, mais celle-ci doit être définie en plus du tableau. Le moyen le plus courant consiste à conserver un nombre d'éléments valides (voir la réponse par pmg) ou, pour les chaînes, à les terminer par un caractère zéro (la réponse par Felix). Il existe également des méthodes plus compliquées, par exemple un tampon en anneau utilise deux index pour les positions où des données sont ajoutées et supprimées.

3
starblue

Ne cherchez pas à mettre à zéro votre tableau de caractères si vous avez affaire à des chaînes. Vous trouverez ci-dessous un moyen simple de travailler avec les chaînes de caractères.

Copier (attribuer une nouvelle chaîne):

strcpy(members, "hello");

Concaténer (ajouter la chaîne):

strcat(members, " world");

Chaîne vide:

members[0] = 0;

Aussi simple que ça.

3
Andrejs Cainikovs

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

2
Chibi.Coder

J'irais avec

members_in_use = 0;
2
pmg
members[0] = 0;

est suffisant, compte tenu de vos besoins.

Notez cependant que cela ne "vide" pas le tampon. La mémoire est toujours allouée, des valeurs de caractères valides peuvent toujours exister dans celle-ci, etc.

2
Michael Foukarakis

plus simple c'est mieux - ça a du sens?

dans ce cas, seuls les membres [0] = 0 fonctionnent . ne compliquent pas une simple question.

1
Test

Vous pouvez utiliser l'instruction suivante:

strcpy_s(members, "");
0
user8853435

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

Si "vidage" signifie "contenant une chaîne vide", vous pouvez simplement affecter le premier élément du tableau à zéro, ce qui fera en sorte que le tableau contienne une chaîne empry:

members[0] = 0;

Si "vider" signifie "libérer la mémoire qu'il utilise", 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 malloc/free (ou une affectation de chaîne) selon le cas.

Un exemple utilisant uniquement des chaînes statiques:

char* emptyString="";
char* members;

//Set string value
members = "old value";

//Empty string value
member = emptyString

//Will return just "new"
strcat(members,"new");
0
Konamiman

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

#include <strings.h>  
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 <string.h>  
void *memset(void *s, int c, size_t n);  
0
secureBadshah