C Programiranje

Kako uporabljati Strcpy () v jeziku C?

Kako uporabljati Strcpy () v jeziku C?
V tem članku se bomo seznanili s funkcijo strcpy () v programskem jeziku C. Funkcija strcpy () je zelo priljubljena funkcija standardne knjižnice za izvajanje operacije kopiranja nizov v programskem jeziku C. Za izvajanje standardnih operacij obstaja več standardnih datotek z glavo v programskem jeziku C. "Niz.h "je ena izmed takih datotek glave, ki ponuja več standardnih funkcij knjižnice za izvajanje nizovnih operacij. Funkcija “strcpy ()” je ena od funkcij knjižnice, ki jih ponuja “string.h ".

Sintaksa:

char * strcpy (char * ciljna_lokacija, const char * source_string);

Razumevanje strcpy ():

Edini namen funkcije strcpy () je kopiranje niza od vira do cilja. Zdaj pa si oglejmo zgornjo sintakso funkcije strcpy (). Funkcija strcpy () lahko sprejme dva parametra -

Izvor je tukaj konstanta, ki zagotavlja, da funkcija strcpy () ne more spremeniti izvornega niza. Funkcija strcpy () kopira vse znake (vključno z znakom NULL na koncu niza) iz izvornega niza v cilj. Ko je postopek kopiranja končan od vira do cilja, funkcija strcpy () vrne naslov cilja nazaj v funkcijo klicatelja.

Pomembno je omeniti, da funkcija strcpy () ne doda izvornega niza s ciljnim nizom. Vsebino cilja raje nadomesti z vsebino izvornega niza.

Funkcija strcpy () ne izvaja nobenega preverjanja, da bi zagotovila, da je velikost cilja večja od izvornega niza, za to je v celoti odgovoren programer.

Primeri:

Zdaj bomo videli nekaj primerov za razumevanje funkcije strcpy ():

  1. strcpy () - Običajno delovanje (primer1.c)
  2. strcpy () - Primer-1 (primer2.c)
  3. strcpy () - Primer-2 (primer3.c)
  4. strcpy () - Primer-3 (primer4.c)
  5. strcpy () - Uporabniško določena različica (primer5.c)
  6. strcpy () - Uporabniško določena različica optimizirana (primer6.c)

strcpy () - Običajno delovanje (primer1.c):

Ta primer programa prikazuje, kako izvesti normalno operacijo kopiranja nizov s pomočjo funkcije strcpy () v programskem jeziku C. Upoštevajte, da je dolžina ciljnega niza 30 (char destination_str [30];), kar je večje od dolžine izvornega niza (dolžina je 18, vključno z znakom NULL), da lahko cilj sprejme vse znake iz izvorni niz.

#include
#include
int main ()

char source_str [] = "www.linuxhint.com ";
char dest_str [30];
printf ("Pred klicem funkcije strcpy (): \ n \ n");
printf ("\ tVir niza =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
strcpy (ciljni_str, izvorni_str);
printf ("Po izvedbi funkcije strcpy (): \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
vrnitev 0;

strcpy () - Primer-1 (primer2.c):

Namen tega primera programa je jasno razložiti, kaj se zgodi, ko je dolžina ciljnega niza manjša od dolžine izvornega niza. V takih primerih ciljna lokacija ne bo imela dovolj prostora / bajtov za namestitev vseh znakov (vključno z znakom NULL) iz izvornega niza. Vedno morate imeti v mislih dve stvari:

  1. Funkcija strcpy () ne bo preverila, ali ima cilj dovolj prostora.
  2. V vdelani programski opremi je to lahko nevarno, ker bo strcpy () nadomestil območje pomnilnika zunaj ciljne meje.

Oglejmo si primer programa. Deklarirali smo source_str in ga inicializirali na “www.linuxhint.com ”, ki bo shranil 18 bajtov v pomnilnik, vključno z znakom Null na koncu niza. Nato smo razglasili še eno vrsto znakov i.e. destination_str z velikostjo samo 5. Cilj_str torej ne more vsebovati izvornega niza s skupno velikostjo 18 bajtov.

A kljub temu pozivamo funkcijo strcpy (), da kopira izvorni niz v ciljni niz. Iz spodnjega izhoda lahko vidimo, da se strcpy () sploh ni pritoževal. V tem primeru bo funkcija strcpy () začela kopirati znak iz izvornega niza (dokler ne najde znaka NULL v izvornem nizu) na ciljni naslov (čeprav ciljna meja presega). To pomeni, da funkcija strcpy () ne izvaja nobenega preverjanja meja za ciljno matriko. Sčasoma bo funkcija strcpy () prepisala pomnilniške naslove, ki niso dodeljeni ciljni matriki. Zaradi tega bo funkcija strcpy () na koncu prepisala lokacije pomnilnika, ki bodo morda dodeljene drugi spremenljivki.

V tem primeru lahko iz spodnjega izhoda vidimo, da funkcija strcpy () prepiše sam izvorni niz. Programerji morajo biti pri takšnem vedenju vedno previdni.

#include
#include
int main ()

char source_str [] = "www.linuxhint.com ";
char dest_str [5];
printf ("Pred klicem funkcije strcpy (): \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
strcpy (ciljni_str, izvorni_str);
printf ("Po izvedbi funkcije strcpy (): \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
// printf ("Naslov naslova =% u (0x% x) \ n", & source_str [0] in & source_str [0]);
// printf ("Ciljni naslov =% u (0x% x) \ n", & destination_str [0], & destination_str [0]);
vrnitev 0;

strcpy () - Primer-2 (primer3.c):

Ta program prikazuje situacijo, ko je ciljna velikost niza večja od velikosti izvornega niza in je ciljni niz že inicializiran z neko vrednostjo. V tem primeru smo inicializirali:

  • source_str na “www.linuxhint.com ”[velikost = 17 + 1 = 18]
  • destination_str do “I_AM_A_DESTINATION_STRING” [velikost = 25 + 1 = 26]

Funkcija strcpy () bo kopirala vseh 17 znakov in znak NULL iz izvornega niza v ciljni niz. Vendar ne bo nadomestil / spremenil preostalih bajtov (bajtov 19 do 26, na osnovi enega) v ciljni matriki. Zanko smo uporabili za iteracijo nad ciljno matriko in tiskanje celotne matrike, da dokažemo, da so bajti-19 do 26 nespremenjeni v ciljnem polju. Zato zadnji izhod vidimo kot:

“Www.linuxhint.com_STRING «.

#include
#include
/ * Ta program prikazuje situacijo, ko:
ciljna velikost niza> velikost izvornega niza
in izvedemo funkcijo strcpy () za kopiranje
izvorni niz do cilja.
Opomba: Velikost ciljnega niza mora biti vedno
biti večji ali enak izvornemu nizu.
* /
int main ()

char source_str [] = "www.linuxhint.com ";
char destination_str [26] = "I_AM_A_DESTINATION_STRING";
printf ("Pred klicem funkcije strcpy (): \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
strcpy (ciljni_str, izvorni_str);
printf ("Po izvedbi funkcije strcpy (): \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
/ * natisni ciljni niz z uporabo zanke * /
printf ("Natisni ciljni niz char z znakom: \ n \ n");
printf ("\ tDestination String =");
za (int i = 0; i<25;i++)

printf ("% c", ciljni_str [i]);

printf ("\ n \ n");
vrnitev 0;

strcpy () - Primer-3 (primer4.c):

Ta program smo obravnavali kot primer, ki dokazuje, da nikoli ne smemo poklicati strcpy () z nizno literalo kot ciljem. To bo povzročilo nedefinirano vedenje in sčasoma se bo program zrušil.

#include
#include
int main ()

char source_str [] = "www.linuxhint.com ";
printf ("Pred klicem funkcije strcpy (): \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
/ * Nikoli ne kliči strcpy () z dobesedno dobesedno oznako kot cilj.
Program se bo zrušil.
* /
strcpy ("destination_str", source_str);
printf ("Po izvedbi funkcije strcpy (): \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
vrnitev 0;

strcpy () - Uporabniško določena različica (primer5.c):

V tem primeru programa smo pokazali, kako napisati uporabniško določeno različico funkcije strcpy ().

#include
char * strcpy_user_defined (char * dest, const char * src);
/ * Uporabniško določena različica funkcije strcpy () * /
char * strcpy_user_defined (char * dest, const char * src)

char * dest_backup = dest;
while (* src != '\ 0') / * Ponavljajte, dokler ne najdete '\ 0'.* /

* dest = * src; / * Kopiraj izvorni znak v cilj * /
src ++; / * Povečanje kazalca vira * /
dest ++; / * Povečaj ciljni kazalec * /

* dest = '\ 0'; / * V cilj vstavite '\ 0' izrecno * /
vrni dest_backup;

int main ()

char source_str [] = "www.linuxhint.com ";
char dest_str [30];
printf ("Pred klicem uporabniško določene funkcije kopiranja nizov: \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
/ * Klicanje uporabniško določene funkcije kopiranja nizov * /
strcpy_user_defined (destination_str, source_str);
printf ("Po izvedbi uporabniško določene funkcije kopiranja nizov: \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
vrnitev 0;

strcpy () - Uporabniško določena različica optimizirana (primer6.c):

Zdaj, v tem primeru programa, bomo optimizirali uporabniško določeno različico strcpy ().

#include
char * strcpy_user_defined (char * dest, const char * src);
/ * Optimizirana različica uporabniško določene funkcije strcpy () * /
char * strcpy_user_defined (char * dest, const char * src)

char * dest_backup = dest;
medtem ko (* dest ++ = * src ++)
;
vrni dest_backup;

int main ()

char source_str [] = "www.linuxhint.com ";
char dest_str [30];
printf ("Pred klicem uporabniško določene funkcije kopiranja nizov: \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
/ * Klicanje uporabniško določene funkcije kopiranja nizov * /
strcpy_user_defined (destination_str, source_str);
printf ("Po izvedbi uporabniško določene funkcije kopiranja nizov: \ n \ n");
printf ("\ tVirni niz =% s \ n", izvor_str);
printf ("\ tNaslednji niz =% s \ n \ n", ciljni_str);
vrnitev 0;

Zaključek:

Funkcija strcpy () je zelo priljubljena in priročna funkcija knjižnice za izvajanje operacije kopiranja nizov v programskem jeziku C. To se v glavnem uporablja za kopiranje niza z ene lokacije na drugo. Vendar želimo ponoviti dejstvo, da funkcija strcpy () ne izvaja preverjanja meje za ciljno matriko, kar bi lahko povzročilo resno napako v programski opremi, če bi jo prezrli. Programer je vedno odgovoren, da zagotovi, da ima ciljna matrika dovolj prostora za shranjevanje vseh znakov iz izvornega niza, vključno z znakom NULL.

WinMouse vam omogoča prilagajanje in izboljšanje premikanja kazalca miške v računalniku z operacijskim sistemom Windows
Če želite izboljšati privzete funkcije kazalca miške, uporabite brezplačno programsko opremo WinMouse. Dodaja več funkcij, s pomočjo katerih boste kar...
Levi gumb miške ne deluje v sistemu Windows 10
Če s prenosnikom ali namiznim računalnikom uporabljate namensko miško, vendar gumb miške z levim klikom ne deluje v operacijskem sistemu Windows 10/8/...
Kazalec skoči ali se naključno premika med tipkanjem v sistemu Windows 10
Če ugotovite, da kazalec miške med tipkanjem v prenosnem računalniku ali računalniku Windows samodejno, naključno preskakuje ali se premika sam, vam l...