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.