Question

En pensant que le premier élément avait la valeur null, tout le contenu d'un tableau de caractères serait effacé.

char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';

Cependant, ceci 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.

Était-ce utile?

La solution

Cela dépend de la façon dont vous voulez voir 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 consiste à toucher chaque entrée. memset est probablement le moyen le plus efficace d'y parvenir.

D'un autre côté, si vous choisissez d'afficher cela en tant que chaîne terminée par un caractère C / C ++ nul, définir le premier octet sur 0 effacera effectivement la chaîne.

Autres conseils

Un tableau en C est simplement un emplacement de mémoire. En conséquence, votre affectation my_custom_data [0] = '\ 0'; met simplement le premier élément à zéro et laisse les autres éléments intacts. / p>

Si vous souhaitez effacer tous les éléments du tableau, vous devrez visiter chaque élément. C’est à quoi sert memset :

memset(&arr[0], 0, sizeof(arr));

C’est généralement le moyen le plus rapide de s’occuper de cela. Si vous pouvez utiliser C ++, considérez std :: fill à la place:

char *begin = &arr;
char *end = begin + sizeof(arr);
std::fill(begin, end, 0);

Pourquoi pensez-vous que définir un seul élément effacerait tout le tableau? En C, en particulier, rien ne se passe sans que le programmeur le programme explicitement. Si vous définissez le premier élément sur zéro (ou une valeur quelconque), 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:

char mcd[40] = {0}; /* sets the whole array */

Sinon, je ne connais aucune technique autre que le memset ou quelque chose de similaire.

Utiliser:

memset(my_custom_data, 0, sizeof(my_custom_data));

Ou:

memset(my_custom_data, 0, strlen(my_custom_data));

Essayez le code suivant:

void clean(char *var) {
    int i = 0;
    while(var[i] != '\0') {
        var[i] = '\0';
        i++;
    }
}

Pourquoi ne pas utiliser memset () ? Voilà comment le faire.

Lorsque vous définissez le premier élément, le reste de la mémoire reste inchangé, mais les fonctions str traiteront les données comme vides.

Pls trouver ci-dessous où j'ai expliqué avec des données dans le tableau après le cas 1 & amp; cas 2.

char sc_ArrData[ 100 ];
strcpy(sc_ArrData,"Hai" );

Cas 1:

sc_ArrData[0] = '\0';

Résultat:

-   "sc_ArrData"
[0] 0 ''
[1] 97 'a'
[2] 105 'i'
[3] 0 ''

Cas 2:

memset(&sc_ArrData[0], 0, sizeof(sc_ArrData));

Résultat:

-   "sc_ArrData"
[0] 0 ''
[1] 0 ''
[2] 0 ''
[3] 0 ''

Bien que définir le premier argument sur NULL fasse l'affaire, il est conseillé d'utiliser memset

Nope. Tout ce que vous faites est de définir la première valeur sur '\ 0' ou 0.

Si vous utilisez des chaînes terminées par un caractère null, dans le premier exemple, vous obtiendrez un comportement qui imite ce que vous attendiez, mais la mémoire est toujours définie.

Si vous souhaitez effacer la mémoire sans utiliser memset, utilisez une boucle for.

Vous devriez utiliser memset. Définir uniquement le premier élément ne fonctionnera pas, vous devez définir tous les éléments. Sinon, comment ne définir que le premier élément sur 0?

Écrire un caractère nul sur le premier caractère ne fait que cela. Si vous le traitez comme une chaîne, le code obéissant au caractère de fin null 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 effacer les données, vous devez utiliser memset.

  

J'ai pensé en définissant le premier élément   à zéro effacerait la totalité   contenu d'un tableau de caractères.

Ce n'est pas correct car vous avez découvert

  

Toutefois, cela ne définit que le premier   élément à null.

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.

Toutefois, si définir un élément du tableau sur null signifie quelque chose de spécial (par exemple, lorsque vous utilisez une chaîne de terminaison null), il peut suffire de définir le premier élément sur null. Ainsi, tout utilisateur du tableau comprendra qu’il est vide même si le tableau inclut toujours les anciens caractères en mémoire

Définissez le premier élément sur NULL. imprimer le tableau de caractères ne vous rendra rien.

Que diriez-vous de ce qui suit:

bzero(my_custom_data,40);

Je fais généralement comme ça:

memset(bufferar, '\0', sizeof(bufferar));
void clearArray (char *input[]){
    *input = ' '; 
}

Essayez ce qui suit:

strcpy(my_custom_data,"");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top