Wie löscht man ein char-Array in C?
Wenn du das char-array als "zero terminated string" behandelst und dir egal ist ob der zuletzt darin enthaltene Wert noch teilweise vorhanden ist, dann setzte das erste Element einfach auf '\0' bzw. 0.
Das wird deine "string-verarbeiteten Funktionen" (wie z.B. "printf()") dazu veranlassen, das erste Element als das Terminierungs-Element zu betrachten und somit das char-array quasi als leer anzusehen. Natürlich behalten dabei alle weiteren Elemente (also alle Elemente nach dem Terminierungs-Element) ihren ursprünglichen Wert.
Es könnten also alle anderen Elemente (also nach dem Terminierungs-Element) des char-arrays noch ausgelesen werden, wenn man wollte.
Bsp:
#include <stdio.h> 
 int main(void) { 
 char myArray[5]; //array with 5 elements 
  myArray[0] = 'T'; 
 myArray[1] = 'E'; 
 myArray[2] = 'X'; 
 myArray[3] = 'T'; 
 myArray[4] = '\0'; //termination element 
  printf("print array: %s", myArray); 
  return 0; 
} 
  //--> OUTPUT: TEXT 
Hier wurde also der Inhalt des char-arrays ausgegeben. Am Bildschirm steht TEXT.
Wenn man jetzt dem ersten Element des char-arrays den Wert '\0' zuweist, dann wird dieses zum Terminierungselement und printf() wird direkt bei diesem Element stoppen. Es wird also kein Text mehr ausgegeben:
#include <stdio.h> 
 int main(void) { 
 char myArray[5]; //array with 5 elements 
  myArray[0] = '\0'; //termination element 
 myArray[1] = 'E'; 
 myArray[2] = 'X'; 
 myArray[3] = 'T'; 
 myArray[4] = '\0'; 
  printf("print array: %s", myArray); 
  return 0; 
} 
  //--> OUTPUT: 
Hier wurde kein Text am Bildschirm ausgegeben.
Aber Achtung: Alle Elemente nach dem ersten Element behalten ihren ursprünglichen Wert.
Wenn du wirklich alle Elemente des char-arrays löschen willst, so hilft dir die Funktion memset(). Mit memset() kannst du einen bestimmten Speicherbereich mit einem Konstanten Wert füllen (z.B. mit 0). Wenn du das mit einem char-array machst (es also per memset() mit 0 füllst) dann ist das erste Element natürlich wieder ein Terminierungs-Element. Dadurch wird printf() sofort beim ersten Element stoppen:
#include <stdio.h> 
#include <string.h> 
 int main(void) { 
      char myArray[5]; //array with 5 elements 
    myArray[0] = 'T'; 
    myArray[1] = 'E'; 
    myArray[2] = 'X'; 
    myArray[3] = 'T'; 
    myArray[4] = '\0'; //termination element 
   memset(myArray, 0, 5); //set all elements of the array to zero 
      printf("print array: %s", myArray); 
     return 0; 
} 
 //--> OUTPUT: 
Hier wurde kein Text am Bildschirm ausgegeben. Zusätzlich sind alle Elemente des char-arrays auf den Wert 0 gesetzt.
Es kommt immer darauf an, was du genau machen willst bzw. ob es für dein Programm ok ist, wenn alte "Reste" eines Strings noch teilweise erhalten bleiben, nachdem du diese nicht mehr benötigst.
Ich hoffe das hilft dir ein bisschen weiter.
LG