logo

fgets() og gets() i C-språk

For å lese en strengverdi med mellomrom kan vi bruke enten gets() eller fgets() i programmeringsspråket C. Her vil vi se hva som er forskjellen mellom gets() og fgets().

fgets()

fgets() leser en linje fra den spesifiserte strømmen og lagrer den i strengen pekt på av str. Den stopper når enten (n-1) tegn leses, nylinjetegnet leses eller slutten av filen nås, avhengig av hva som kommer først.



Syntaks

char * fgets  (char * str , int n , FILE * stream );>

Parametere

    str: Peker til en rekke tegn hvor den leste strengen kopieres. n: Maksimalt antall tegn som skal kopieres til str (inkludert det avsluttende nulltegnet). *stream: Peker til et FILE-objekt som identifiserer en inngangsstrøm.

Merk: stdin kan brukes som argument for å lese fra standardinngangen.

Returverdi

  • Funksjonen fgets() returnerer en peker til strengen der inndata er lagret.

Funksjoner av fgets()

  • Den følger noen parametere som maksimal lengde, buffer og inngangsenhetsreferanse.
  • Det er sikker å bruke fordi den kontrollerer array-bundet.
  • Den fortsetter å lese til et nytt linjetegn oppstår eller maksimumsgrensen for tegnarrayen.

Eksempel på fgets()

La oss si at det maksimale antallet tegn er 15 og inndatalengden er større enn 15, men fortsatt vil fgets() bare lese 15 tegn og skrive det ut.

C








// C program to illustrate fgets()> #include> #define MAX 15> int> main()> {> >// defining buffer> >char> buf[MAX];> >// using fgets to take input from stdin> >fgets>(buf, MAX, stdin);> >printf>(>'string is: %s '>, buf);> >return> 0;> }>

Last ned turbo c++

>

>

Siden fgets() leser input fra brukeren, må vi gi input under kjøring.

 Input: Hello and welcome to techcodeview.com Output: string is: Hello and welc>

får()

Leser tegn fra standardinndata (stdin) og lagrer dem som en C-streng i str til et linjeskifttegn eller slutten av filen er nådd.

  • Det er ikke trygt å bruke fordi det ikke sjekker array-bundet.
  • Den brukes til å lese strenger fra brukeren inntil et linjeskifttegn ikke oppdages.

Syntaks

char * gets ( char * str  );>

Parametere

    str: Peker til en minneblokk (array of char) hvor den leste strengen kopieres som en C-streng.

Returverdi

  • Funksjonen returnerer en peker til strengen der inndata er lagret.

Eksempel på gets()

Anta at vi har en tegnarray på 15 tegn og inndata er større enn 15 tegn, vil gets() lese alle disse tegnene og lagre dem i en variabel. Siden gets() ikke sjekker den maksimale grensen for inndatategn, kan kompilatoren når som helst returnere bufferoverløpsfeil.

C++




// C program to illustrate> // gets()> #include> #define MAX 15> int> main()> {> >// defining buffer> >char> buf[MAX];> >printf>(>'Enter a string: '>);> >// using gets to take string from stdin> >gets>(buf);> >printf>(>'string is: %s '>, buf);> >return> 0;> }>

linux kommandoer som
>

>

Siden gets() leser input fra brukeren, må vi gi input under kjøring.

 Input : Hello and welcome to techcodeview.com Output : Hello and welcome to techcodeview.com>

Konklusjon

Både fgets()- og gets()-funksjoner kan brukes til å lese strenginndata fra standardinndata. Hovedforskjellen mellom fgets()-funksjonen og gets()-funksjonen er at fgets()-funksjonen lar brukeren spesifisere maksimalt antall tegn som skal leses, og vi kan også endre inngangsstrømmen til en hvilken som helst fil i fgets().