cancellare un array di caratteri c


Answers

Un array in C è solo una locazione di memoria, quindi in effetti my_custom_data[0] = '\0'; assegnazione semplicemente imposta il primo elemento a zero e lascia gli altri elementi intatti.

Se vuoi cancellare tutti gli elementi dell'array, dovrai visitare ogni elemento. Questo è ciò che memset è per:

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

Questo è generalmente il modo più veloce per prendersi cura di questo. Se puoi usare C ++, considera invece std :: fill:

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

Ho pensato impostando il primo elemento su null cancellerebbe l'intero contenuto di un array di caratteri.

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

Tuttavia, questo imposta solo il primo elemento su null.

o

my_custom_data[0] = 0; 

piuttosto che usare memset , ho pensato che i 2 esempi sopra dovrebbero cancellare tutti i dati.




imposta il primo elemento su NULL. stampare il char array non ti restituirà nulla.




Di solito faccio solo così:

memset(bufferar, '\0', sizeof(bufferar));



No. Tutto quello che stai facendo è impostare il primo valore su '\ 0' o 0.

Se stai lavorando con stringhe con terminazione nulla, nel primo esempio otterrai un comportamento che riproduce ciò che ti aspetti, tuttavia la memoria è ancora impostata.

Se vuoi cancellare la memoria senza usare memset, usa un ciclo for.




Scrivere un carattere null al primo personaggio fa proprio questo. Se lo trattate come una stringa, il codice che obbedisce al carattere di terminazione null lo tratterà come una stringa nulla, ma non è lo stesso che cancellare i dati. Se vuoi effettivamente cancellare i dati dovrai usare memset.




Prova quanto segue:

strcpy(my_custom_data,"");



Prova il seguente codice:

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



Uso:

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

O:

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