C Programmering

Hvordan bruke Strcpy () på C-språk?

Hvordan bruke Strcpy () på C-språk?
I denne artikkelen skal vi lære om strcpy () -funksjonen i C-programmeringsspråket. Strcpy () -funksjonen er en veldig populær standard biblioteksfunksjon for å utføre strengkopiering i C-programmeringsspråket. Det er flere standard headerfiler på C-programmeringsspråk for å utføre standardoperasjoner. "Strengen.h ”er en av slike headerfiler, som gir flere standard biblioteksfunksjoner for å utføre strengoperasjoner. Funksjonen “strcpy ()” er en av biblioteksfunksjonene som tilbys av “streng.h ”.

Syntaks:

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

Forstå strcpy ():

Det eneste formålet med funksjonen strcpy () er å kopiere en streng fra kilde til destinasjon. La oss nå se på ovennevnte syntaks for strcpy () -funksjonen. Strcpy () -funksjonen kan akseptere to parametere -

Kilden er en konstant her for å sikre at funksjonen strcpy () ikke kan endre kildestrengen. Strcpy () -funksjonen kopierer alle tegnene (inkludert NULL-tegnet på slutten av strengen) fra kildestrengen til destinasjonen. Når kopieringen er fullført fra kilde til destinasjon, returnerer strcpy () -funksjonen adressen til destinasjonen tilbake til anropsfunksjonen.

Det viktige punktet å legge merke til her er at funksjonen strcpy () ikke legger til kildestrengen med destinasjonsstrengen. Det erstatter heller innholdet på destinasjonen med innholdet i kildestrengen.

Også, strcpy () -funksjonen utfører ingen kontroller for å sikre at størrelsen på destinasjonen er mer enn kildestrengen, det er helt ansvaret for programmereren.

Eksempler:

Nå vil vi se flere eksempler for å forstå funksjonen strcpy ():

  1. strcpy () - Normal bruk (eksempel1.c)
  2. strcpy () - Sak-1 (eksempel2.c)
  3. strcpy () - Sak-2 (eksempel3.c)
  4. strcpy () - Sak-3 (eksempel4.c)
  5. strcpy () - Brukerdefinert versjon (eksempel5.c)
  6. strcpy () - Brukerdefinert versjon optimalisert (eksempel 6.c)

strcpy () - Normal drift (eksempel1.c):

Dette eksempelprogrammet viser hvordan du utfører en normal strengkopiering ved hjelp av strcpy () -funksjonen i programmeringsspråket C. Vær oppmerksom på at lengden på destinasjonsstrengen er 30 (char destination_str [30];), som er større enn lengden på kildestrengen (lengden er 18 inkludert NULL-tegnet), slik at destinasjonen kan ta imot alle tegnene fra kildestreng.

#inkludere
#inkludere
int main ()

char source_str [] = "www.linuxhint.com ";
røye destinasjon_str [30];
printf ("Før du ringer til strcpy () -funksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
strcpy (destinasjon_str, kilde_str);
printf ("Etter kjøring av strcpy () -funksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
retur 0;

strcpy () - Sak-1 (eksempel2.c):

Hensikten med dette eksempelprogrammet er å tydelig forklare hva som skjer når destinasjonsstrengens lengde er mindre enn kildestrengens lengde. I slike tilfeller vil destinasjonsplasseringen ikke ha nok mellomrom / byte til å imøtekomme alle tegnene (inkludert NULL-tegn) fra kildestrengen. To ting, bør du alltid huske på:

  1. Strcpy () -funksjonen vil ikke sjekke om destinasjonen har nok plass.
  2. Dette kan være farlig i innebygd programvare fordi strcpy () vil erstatte minneområdet utenfor destinasjonens grense.

La oss se på eksempelprogrammet. Vi har erklært source_str og initialisert den til “www.linuxhint.com ”, som tar 18 byte i minnet å lagre, inkludert Null-tegnet på slutten av strengen. Deretter har vi erklært et annet tegnarrangement i.e. destinasjon_str med størrelsen på bare 5. Så mål_str kan ikke holde kildestrengen med en total størrelse på 18 byte.

Men likevel kaller vi strcpy () -funksjonen for å kopiere kildestrengen til destinasjonsstrengen. Fra utdataene nedenfor kan vi se at strcpy () ikke klaget i det hele tatt. I dette tilfellet begynner strcpy () -funksjonen å kopiere tegnet fra kildestrengen (til den finner NULL-tegnet i kildestrengen) til destinasjonsadressen (selv om destinasjonsgrensen overskrider). Det betyr at strcpy () -funksjonen ikke gjør noen grensekontroll for destinasjonsmatrisen. Til slutt vil strcpy () -funksjonen overskrive minneadressene som ikke er tildelt destinasjonsmatrisen. Dette er grunnen til at strcpy () -funksjonen ender med å overskrive minneplasseringene som kan være allokert til en annen variabel.

I dette eksemplet kan vi se fra utdataene nedenfor at funksjonen strcpy () overskriver selve kildestrengen. Programmører bør alltid være forsiktige med slik oppførsel.

#inkludere
#inkludere
int main ()

char source_str [] = "www.linuxhint.com ";
char destinasjon_str [5];
printf ("Før du ringer til strcpy () -funksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
strcpy (destinasjon_str, kilde_str);
printf ("Etter kjøring av strcpy () -funksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
// printf ("Source Address =% u (0x% x) \ n", & source_str [0], & source_str [0]);
// printf ("Destinasjonsadresse =% u (0x% x) \ n", & destinasjonsstr [0], og destinasjonsstr [0]);
retur 0;

strcpy () - Sak-2 (eksempel3.c):

Dette programmet illustrerer situasjonen når målstrengstørrelsen er større enn kildestrengstørrelsen og destinasjonsstrengen allerede er initialisert med en viss verdi. I dette eksemplet har vi initialisert:

  • source_str til “www.linuxhint.com ”[størrelse = 17 + 1 = 18]
  • destinasjon_str til “I_AM_A_DESTINATION_STRING” [size = 25 + 1 = 26]

Strcpy () -funksjonen kopierer alle de 17 tegnene og NULL-tegnet fra kildestrengen til destinasjonsstrengen. Men det vil ikke erstatte / endre de gjenværende byte (Byte 19 til 26, en basert) i destinasjonsmatrisen. Vi har brukt for loop for å iterere over destinasjonsmatrisen og skrive ut hele matrisen for å bevise at byte-19 til 26 er uendret i destinasjonsmatrisen. Derfor ser vi den siste utgangen som:

“Www.linuxhint.com_STRING ”.

#inkludere
#inkludere
/ * Dette programmet illustrerer situasjonen når:
målstrengsstørrelse> kildestrengsstørrelse
og vi utfører funksjonen strcpy () for å kopiere
kildestreng til destinasjon.
Merk: Målstrengstørrelsen skal alltid være
være større enn eller lik kildestrengen.
* /
int main ()

char source_str [] = "www.linuxhint.com ";
char destination_str [26] = "I_AM_A_DESTINATION_STRING";
printf ("Før du ringer til strcpy () -funksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
strcpy (destinasjon_str, kilde_str);
printf ("Etter kjøring av strcpy () -funksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
/ * skriv destinasjonsstreng ved hjelp av for loop * /
printf ("Skriv ut destinasjonsstrengen char etter char: \ n \ n");
printf ("\ tDestination String =");
for (int i = 0; i<25;i++)

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

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

strcpy () - Sak-3 (eksempel4.c):

Vi har sett på dette programmet som et eksempel for å vise at vi aldri skal kalle strcpy () med en streng som bokstav. Dette vil føre til udefinert oppførsel, og til slutt vil programmet krasje.

#inkludere
#inkludere
int main ()

char source_str [] = "www.linuxhint.com ";
printf ("Før du ringer til strcpy () -funksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
/ * Ring aldri strcpy () med streng bokstavelig som destinasjon.
Programmet vil krasje.
* /
strcpy ("destinasjon_str", kilde_str);
printf ("Etter kjøring av strcpy () -funksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
retur 0;

strcpy () - Brukerdefinert versjon (eksempel5.c):

I dette eksempelprogrammet har vi vist hvordan du skriver en brukerdefinert versjon av strcpy () -funksjonen.

#inkludere
char * strcpy_user_defined (char * dest, const char * src);
/ * Brukerdefinert versjon av strcpy () -funksjonen * /
char * strcpy_user_defined (char * dest, con char char * src)

char * dest_backup = dest;
mens (* src != '\ 0') / * Iterer til '\ 0' er funnet.* /

* dest = * src; / * Kopier kildetegn til destinasjon * /
src ++; / * Øk kildepekeren * /
dest ++; / * Øk destinasjonspeker * /

* dest = '\ 0'; / * Sett inn '\ 0' i destinasjonen eksplisitt * /
return dest_backup;

int main ()

char source_str [] = "www.linuxhint.com ";
røye destinasjon_str [30];
printf ("Før du ringer til brukerdefinert strengkopifunksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
/ * Ringer brukerdefinert strengkopieringsfunksjon * /
strcpy_user_defined (destinasjon_str, kilde_str);
printf ("Etter kjøring av brukerdefinert strengkopifunksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
retur 0;

strcpy () - Brukerdefinert versjon optimalisert (eksempel 6.c):

Nå, i dette eksempelprogrammet, skal vi optimalisere den brukerdefinerte versjonen av strcpy ().

#inkludere
char * strcpy_user_defined (char * dest, const char * src);
/ * Optimalisert versjon av brukerdefinert strcpy () -funksjon * /
char * strcpy_user_defined (char * dest, con char char * src)

char * dest_backup = dest;
mens (* dest ++ = * src ++)
;
return dest_backup;

int main ()

char source_str [] = "www.linuxhint.com ";
røye destinasjon_str [30];
printf ("Før du ringer til brukerdefinert strengkopifunksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
/ * Ringer brukerdefinert strengkopieringsfunksjon * /
strcpy_user_defined (destinasjon_str, kilde_str);
printf ("Etter å ha utført brukerdefinert strengkopifunksjon: \ n \ n");
printf ("\ tSource String =% s \ n", source_str);
printf ("\ tDestinasjonsstreng =% s \ n \ n", destinasjon_str);
retur 0;

Konklusjon:

Strcpy () -funksjonen er en veldig populær og hendig biblioteksfunksjon for å utføre strengekopiering i C-programmeringsspråket. Dette brukes hovedsakelig til å kopiere strengen fra ett sted til et annet sted. Vi ønsker imidlertid å gjenta det faktum at strcpy () -funksjonen ikke utfører grensekontroll for destinasjonsmatrisen, noe som kan føre til en alvorlig programvarefeil hvis den ignoreres. Det er alltid ansvaret til programmereren å sørge for at destinasjonsmatrisen har nok plass til å holde alle tegnene fra kildestrengen inkludert NULL-tegnet.

Installer nyeste Dolphin Emulator for Gamecube & Wii på Linux
Dolphin Emulator lar deg spille de valgte Gamecube- og Wii-spillene dine på Linux Personal Computers (PC). Som en fritt tilgjengelig og åpen kildekod...
Hvordan bruke GameConqueror Cheat Engine i Linux
Artikkelen dekker en guide om bruk av GameConqueror-juksemotoren i Linux. Mange brukere som spiller spill på Windows bruker ofte "Cheat Engine" -appli...
Beste spillkonsollemulatorer for Linux
Denne artikkelen vil liste opp populære programvare for spillkonsollemulering tilgjengelig for Linux. Emulation er et programvarekompatibilitetslag so...