Je pensais qu'en définissant le premier élément sur null effacerait tout le contenu d'un tableau de caractères.
char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';
Cependant, cela ne définit que le premier élément sur null.
ou
my_custom_data[0] = 0;
plutôt que d'utiliser memset
, j'ai pensé que les 2 exemples ci-dessus devraient effacer toutes les données.
Réponses:
Cela dépend de la façon dont vous souhaitez afficher le tableau. Si vous visualisez le tableau sous la forme d'une série de caractères, le seul moyen d'effacer les données est de toucher chaque entrée.
memset
est probablement le moyen le plus efficace pour y parvenir.D'un autre côté, si vous choisissez de l'afficher comme une chaîne terminée par null C / C ++, la définition du premier octet à 0 effacera effectivement la chaîne.
la source
Un tableau en C est juste un emplacement mémoire, donc en effet, votre
my_custom_data[0] = '\0';
affectation met simplement le premier élément à zéro et laisse les autres éléments intacts.Si vous souhaitez effacer tous les éléments du tableau, vous devrez visiter chaque élément. C'est à cela que
memset
sert:C'est généralement le moyen le plus rapide de s'en occuper. Si vous pouvez utiliser C ++, considérez plutôt std :: fill:
la source
Pourquoi pensez-vous que la définition d'un seul élément effacerait tout le tableau? En C, en particulier, il ne se passe rien sans que le programmeur ne le programme explicitement. Si vous définissez le premier élément sur zéro (ou sur n'importe quelle valeur), c'est exactement ce que vous avez fait et rien de plus.
Lors de l'initialisation, vous pouvez définir un tableau sur zéro:
Sinon, je ne connais aucune technique autre que memset, ou quelque chose de similaire.
la source
Utilisation:
Ou:
la source
memset(my_custom_data, 0, strlen(my_custom_data));
) n'effacera que le premier '\ 0', qui pourrait être au-delà de la fin du tableau. Cela peut, ou non, être correct.Essayez le code suivant:
la source
Pourquoi ne pas l'utiliser
memset()
? Voilà comment procéder.La définition du premier élément laisse le reste de la mémoire intact, mais les fonctions str traiteront les données comme vides.
la source
Veuillez trouver ci-dessous où j'ai expliqué avec les données du tableau après le cas 1 et le cas 2.
Cas 1:
Résultat:
Cas 2:
Résultat:
Bien que définir le premier argument sur NULL fera l'affaire, il est conseillé d'utiliser memset
la source
Nan. Tout ce que vous faites est de définir la première valeur sur «\ 0» ou 0.
Si vous travaillez avec des chaînes terminées nulles, dans le premier exemple, vous obtiendrez un comportement qui imite ce que vous attendez, mais la mémoire est toujours définie.
Si vous souhaitez effacer la mémoire sans utiliser memset, utilisez une boucle for.
la source
Vous devez utiliser memset. Définir uniquement le premier élément ne fonctionnera pas, vous devez définir tous les éléments.Sinon, comment pourriez-vous définir uniquement le premier élément à 0?
la source
L'écriture d'un caractère nul sur le premier caractère fait exactement cela. Si vous le traitez comme une chaîne, le code obéissant au caractère de terminaison nul le traitera comme une chaîne nulle, mais ce n'est pas la même chose que d'effacer les données. Si vous souhaitez réellement effacer les données, vous devrez utiliser memset.
la source
Je fais généralement comme ça:
la source
Ce n'est pas correct comme tu l'as découvert
Exactement!
Vous devez utiliser memset pour effacer toutes les données, il ne suffit pas de définir l'une des entrées sur null.
Cependant, si la définition d'un élément du tableau sur null signifie quelque chose de spécial (par exemple lors de l'utilisation d'une chaîne de terminaison nulle dans), il peut être suffisant de définir le premier élément sur null. De cette façon, tout utilisateur du tableau comprendra qu'il est vide même si le tableau inclut toujours les anciens caractères en mémoire
la source
définissez le premier élément sur NULL. l'impression du tableau de caractères ne vous rendra rien.
la source
Que diriez-vous de ce qui suit:
la source
la source
Essayez ce qui suit:
la source