Hvordan redusere lengden på en streng i C

Når du arbeider med strykere i C, kan det være nyttig å dynamisk øke eller redusere størrelsen på en snor for å administrere minnet effektivt. Normale strenger som er definert av "char *" søkeord har statiske størrelser som ikke kan endres, slik at du må jobbe direkte med minneblokker i stedet. Bruk "malloc" funksjon for å opprette en minneblokk som lagrer strengen og deretter "realloc" funksjon for å endre minneblokkstørrelsen.

Bruksanvisning

1 Åpne C kildefilen i et redigeringsprogram, for eksempel Microsoft Visual Studio Express.

2 Legg til følgende kode på toppen av din C kildefilen, slik at du kan få tilgang til minnefunksjoner:

inkludere <stdio.h> inkluder <stdlib.h>

3 Erklærer variablene som du vil bruke ved å legge til følgende kode på toppen av funksjon:

char

buf, cur_ptr, * temp_ptr;

char c;

size_t mem_size = 200;

size_t mem_used = 0;

4 Kaller "malloc" funksjon for å allokere en blokk med minne som du kan bruke til å lagre strengen, ved å legge inn koden:

buf =

(char) malloc ((mem_size) sizeof (char));

if (buf == NULL) avkastning 1;

5 Motta brukerundersøkelser, ett tegn om gangen, til en linjeskift ( '\ n') tegn eller 200 tegn er lagt inn, ved å legge inn koden:

cur_ptr = buf;

while ((c = getchar ())! = '\ n') {

* Cur_ptr ++ = c;

mem_used ++;

if (mem_used == mem_size) break;

}

6 Kaller "realloc" -funksjonen for å omfordele minnet blokken, redusere størrelsen med 2, med følgende kode:

if (mem_used> 2) {

mem_size - = 2;

temp_ptr = realloc (buf, mem_size);

if (temp_ptr == NULL) avkastning 1;

buf = temp_ptr;

cur_ptr = buf + mem_used;

}

Pekeren "buf" peker til starten av den "streng" minne blokk og "cur_ptr" peker på den nåværende posisjon, som er den ende av "streng".

7 Ring "gratis" -funksjonen for å frigjøre minnemodul for streng, ellers programmet vil ha en minnelekkasje, ved å legge inn koden:

gratis (buf);

8 Lagre C-filen, kompilere og kjøre programmet for å utføre den nye strengen kode.