wake-up-neo.net

Der richtige Weg, um einen C-String zu leeren

Ich habe an einem Projekt in C gearbeitet, bei dem ich viel mit Strings herumspielen muss. Normalerweise programmiere ich in C++, also ist das ein bisschen anders, als nur string.empty () zu sagen.

Ich frage mich, wie man eine Zeichenfolge in C richtig leeren würde. Wäre es das?

 buffer [80] = "Hallo Welt!\n"; 

 // ...

 strcpy (Puffer, ""); 
37
Benjamin

Es hängt davon ab, was Sie mit "leer" meinen. Wenn Sie nur eine Zeichenfolge mit der Länge Null wünschen, funktioniert Ihr Beispiel.

Das wird auch funktionieren:

buffer[0] = '\0';

Wenn Sie den gesamten Inhalt der Zeichenfolge auf Null setzen möchten, können Sie dies folgendermaßen tun:

memset(buffer,0,strlen(buffer));

dies funktioniert jedoch nur zum Nullstellen auf das erste NULL-Zeichen.

Wenn die Zeichenfolge ein statisches Array ist, können Sie Folgendes verwenden:

memset(buffer,0,sizeof(buffer));
71
Mysticial

Zwei weitere Möglichkeiten sind strcpy(str, ""); und string[0] = 0

Um den Inhalt der Variablen wirklich zu löschen (falls Sie Dirty-Code haben, der mit den obigen Ausschnitten nicht richtig funktioniert: P), verwenden Sie eine Schleife wie im folgenden Beispiel.

#include <string.h>

...

int i=0;
for(i=0;i<strlen(string);i++)
{
    string[i] = 0;
}

Falls Sie ein dynamisch zugewiesenes Array von Zeichen von Anfang an löschen möchten, können Sie Entweder eine Kombination aus malloc () und memset () verwenden oder - und dies ist viel schneller - calloc (), die dasselbe tut malloc, initialisiert jedoch das gesamte Array mit Null.

Zum Schluss möchte ich, dass Sie Ihre Laufzeit im Auge behalten. Alles in allem sollten Sie, wenn Sie große Arrays (6-stellig und höher) verwenden, den ersten Wert auf Null setzen, anstatt memset () durchzulaufen der ganze String.

Es sieht auf den ersten Blick schmutziger aus, ist aber viel schneller. Sie müssen nur mehr auf Ihren Code achten;)

Ich hoffe das war für alle nützlich;)

2
Aiyion.Prime

Kommt drauf an, was Sie mit Entleerung meinen. Wenn Sie nur eine leere Zeichenfolge wünschen, können Sie dies tun

buffer[0] = 0;

Wenn Sie jedes Element auf Null setzen möchten, tun Sie

memset(buffer, 0, 80);
1
Ben Ruijl

benötigt den Namen des Strings und seine Länge setzt alle Zeichen auf ... Andere Methoden werden möglicherweise bei der ersten Null angehalten, auf die sie stoßen

    void strClear(char p[],u8 len){u8 i=0; 
        if(len){while(i<len){p[i]=0;i++;}}
    }
0
Denes Borsos