logo

fgets()-funktionen i C

I C-programmering, hantering inmatning och produktion aktiviteter är väsentliga. Fgets() är en av många funktioner som finns tillgängliga för inmatning . Med hjälp av denna robusta funktion kan utvecklare säkert och exakt läsa information från en given ström. I den här artikeln kommer vi att undersöka ins och outs av fgets() , går över dess syntax, applikation, exempelkod , och förväntade resultat .

De fgets() funktion , Förkortning av 'fil ​​få sträng' , används ofta för att läsa en sträng från en filström eller standardingång (stdin) . Det ger en säkrare ersättning för det utfasade gets() funktion , som tidigare användes men nu utgör ett säkerhetsproblem. Funktionen fgets() erbjuder ett sätt att begränsa antalet tecken som läses och hanterar effektivt nyradstecken.

Syntaxen för fgets() är följande:

 char *fgets(char *str, int size, FILE *stream); 

Parametrarna är uppdelade enligt följande:

str: Det är en referens till teckenuppsättningen (strängen) som kommer att användas för att lagra indata.

storlek: Det totala antalet tecken (inklusive nolltecken '0' ) som kan läsas.

ström: Pekenheten till indatafilströmmen eller stdin den där fgets() kommer att läsa från.

För att bättre förstå hur fgets() fungerar, låt oss titta på ett exempel:

Exempel:

 #include int main() { char input[100]; printf('Enter a string: '); fgets(input, sizeof(input), stdin); printf('You entered: %s', input); return 0; } 

Produktion:

 Enter a string: Hello, World! You entered: Hello, World! Enter a string: This is a very long string that exceeds the limit of the input buffer. You entered: This is a very long string that exceeds the limit of the input buffer. If a user types an empty text by simply pressing the Enter key: Enter a string: You entered: 

Förklaring:

I exemplet ovan börjar vi med att införliva lämplig rubrikfil, 'stdio.h' . Därefter definieras inmatningssträngen som en teckenmatrisinmatning med en storlek på 100.

Använder sig av printf() funktion , programmet ber användaren att ange en sträng. Efter det, stdin används som ingångsström , och fgets() används med indata som destinationssträng, sizeof(ingång) och maximal storlek att läsa. Efter det använder programmet printf() för att mata ut den angivna strängen.

Fgets() funktion kan läsa och spara nyradstecken 'n' om den visas innan den maximala storleken har uppnåtts. Det gör det möjligt att se om inmatningsraden lästes helt eller trunkerad på grund av utrymmesbegränsningar.

Exempel:

Med det modifierade kodavsnittet kan du använda strcspn() metod till radera de ny linje tecken från inmatningssträngen:

 #include #include int main() { char input[100]; printf('Enter a string: '); fgets(input, sizeof(input), stdin); input[strcspn(input, '
')] = ''; // Remove the newline character printf('You entered: %s', input); return 0; } 

Produktion:

 Enter a string: Hello World You entered: Hello World 

Förklaring:

Längden på delsträngen som består av tecken som inte ingår i den medföljande teckenuppsättningen bestäms av strcspn() funktion . I det här fallet nolltecken '0' används för att ersätta nyradstecknet efter att ha specificerat 'n' som en uppsättning tecken att söka efter.

Slutsats:

Avslutningsvis läsning inmatningssträngar från filströmmar eller standardinmatning med C fgets() metod är pålitlig och säker. Det är ett användbart verktyg för att bearbeta användarinmatning på ett reglerat sätt eftersom det låter dig välja en maximal storlek för inmatning och hanterar nyradstecken.

Det föråldrade gets() funktion ersätts av det säkrare fgets() funktion , som åtgärdar säkerhetsbrister orsakade av bufferten svämmar över . Den ser till att inmatningssträngen inte blir större än vad som är tillåtet, vilket undviker potentiella problem med minneskorruption.

cobol programmering

Den medföljande exempelkoden visar hur du använder fgets() korrekt för att fånga användarinmatning och ta bort nyradstecknet om det visas. Det betonar hur viktigt det är att ta hänsyn till inmatningsbegränsningar och hantera nya radstecken för att säkerställa korrekt strängbearbetning.

Utvecklare kan förbättra säkerheten och robustheten i sina C-program med fgets() . De kan undvika oväntade beteenden och potentiella säkerhetsöverträdelser orsakade av stora indata genom att definiera en maximal storlek för input.

Aspirerande C-programmerare bör bli bekanta med fgets() och dess användningsinstruktioner för att säkerställa säker och effektiv inmatningshantering. Utvecklare som är medvetna om denna funktion kan producera mer pålitlig och säker programvara som skyddar mot indatarelaterade sårbarheter som ofta uppstår.