Wie die Länge einer Zeichenkette in C reduzieren

April 15

Beim Arbeiten mit Strings in C kann es hilfreich sein, dynamisch erhöhen oder verringern Sie die Größe einer Zeichenfolge seinen Speicher effizient zu managen. Normale Zeichenfolgen definiert durch die "Char *" Schlüsselwort haben statische Größen, die nicht ändern können, so müssen Sie stattdessen direkt mit Speicherblöcke zu arbeiten. Verwenden Sie die Funktion "Malloc" einen Speicherblock zu erstellen, der die Zeichenfolge speichert und dann die "Realloc"-Funktion, um die Blockgröße Speicher ändern.

Anweisungen

1 Öffnen Sie Ihre C-Quellcode-Datei in einem Editor, z. B. Microsoft Visual Studio Express.

2 Fügen Sie den folgenden Code am oberen Rand der C-Quelldatei, sodass Sie die Speicherfunktionen zugreifen können:

enthalten < stdio.h > < stdlib.h > 3 enthalten Deklarieren von Variablen, die Sie verwenden werden, durch hinzufügen den folgenden Code am oberen Rand Ihrer Funktion:

Buf, Cur_ptr, char * Temp_ptr;

Char c;

Size_t Mem_size = 200;

Size_t Mem_used = 0;

4 Rufen Sie die "Malloc"-Funktion, um einen Speicherblock zuordnen, die Sie zum Speichern der Zeichenfolge, indem Sie den Code verwenden können:

Buf = (Char ) malloc((mem_size)sizeof(char));

If(buf == null) 1; zurückgeben

5 Eingaben des Benutzers zu erhalten, ein Zeichen zu einem Zeitpunkt, bis zu einem Zeilenvorschub ("\n") oder 200 Zeichen eingegeben, indem Sie den Code:

Cur_ptr = Buf;

während ((c = getchar())! = '\n') {}

*cur_ptr++ = c;

Mem_used ++;

Wenn (Mem_used == Mem_size) brechen;

}

6 Rufen Sie die "Realloc"-Funktion, um den Speicherblock, Verringerung seiner Größe durch 2, durch den folgenden Code zu reservieren:

Wenn (Mem_used > 2) {}

Mem_size = 2;

Temp_ptr = Realloc (Buf, Mem_size);

Wenn (Temp_ptr == NULL) return-1;

Buf = Temp_ptr;

Cur_ptr = Buf + Mem_used;

}

Der Zeiger "Buf" verweist auf den Anfang der "Zeichenfolge" Speicher Block und "Cur_ptr" verweist auf die aktuelle Position, die das Ende der "String".

7 Aufruf die "freie" Funktion um den Speicher freizugeben blockieren für die Zeichenfolge andernfalls Ihr Programm haben einen Speicherverlust durch Hinzufügen des Codes:

Free(buf);

8 Speichern Sie die C-Datei, kompilieren Sie und führen Sie das Programm, den neue Zeichenfolge-Code auszuführen.