logo

fgets()-functie in C

Bij C-programmeren, handling invoer En uitgang activiteiten is essentieel. Fgets() is een van de vele functies waarvoor beschikbaar is invoer . Met behulp van deze robuuste functie kunnen ontwikkelaars veilig en nauwkeurig informatie uit een bepaalde stream lezen. In dit artikel zullen we onderzoeken ins En uit van fgets() , erover heen gaan syntaxis, toepassing, voorbeeldcode , En verwachte resultaten .

De fgets() functie , kort voor 'bestand krijg tekenreeks' , wordt vaak gebruikt om een ​​string uit een bestandsstroom te lezen of standaardinvoer (stdin) . Het biedt een veiliger alternatief voor het verouderde krijgt() functie , dat eerder werd gebruikt maar nu een veiligheidsprobleem oplevert. De functie fgets() biedt een manier om het aantal gelezen tekens te beperken en verwerkt effectief nieuweregeltekens.

De syntaxis voor fgets() is als volgt:

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

De parameters zijn als volgt onderverdeeld:

str: Het is een verwijzing naar de tekenreeks (tekenreeks) die zal worden gebruikt om de invoer op te slaan.

maat: Het totale aantal tekens (inclusief de nulteken '0' ) die gelezen kan worden.

stroom: Het aanwijsapparaat naar de invoerbestandsstream of stdin Dat fgets() zal voorlezen.

Laten we een voorbeeld bekijken om beter te begrijpen hoe fgets() functioneert:

Voorbeeld:

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

Uitgang:

 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: 

Uitleg:

In het bovenstaande voorbeeld beginnen we met het opnemen van het juiste headerbestand, 'stdio.h' . Daarna wordt de invoerreeks gedefinieerd als een tekenreeksinvoer met een grootte van 100.

Gebruik makend van printf()-functie , vraagt ​​het programma de gebruiker om een ​​string in te voeren. Daarna, stdin wordt gebruikt als de invoerstroom , En fgets() wordt gebruikt met invoer als bestemmingsreeks, groottevan(invoer) en maximale leesgrootte. Daarna gebruikt het programma printf() om de ingevoerde string uit te voeren.

Fgets() functie kan lezen En redden het newline-teken 'N' als het verschijnt voordat de maximale grootte is bereikt. Het maakt het mogelijk om te bepalen of de invoerregel volledig is gelezen of is afgekapt vanwege ruimtebeperkingen.

Voorbeeld:

Met behulp van het gewijzigde codefragment kunt u de strcspn()-methode naar verwijderen de nieuwe lijn teken uit de invoerreeks:

 #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; } 

Uitgang:

 Enter a string: Hello World You entered: Hello World 

Uitleg:

De lengte van de substring die bestaat uit tekens die niet in de meegeleverde tekenset voorkomen, wordt bepaald door de strcspn()-functie . In dit geval is de nulteken '0' wordt gebruikt om het newline-teken te vervangen na het specificeren 'N' als de reeks tekens waarnaar moet worden gezocht.

Conclusie:

Kortom, lezen invoerreeksen van bestandsstreams of standaardinvoer met behulp van de C fgets() methode is betrouwbaar en veilig. Het is een handig hulpmiddel voor het op gereguleerde wijze verwerken van gebruikersinvoer, omdat u hiermee een maximale grootte voor invoer kunt selecteren en nieuweregeltekens kunt verwerken.

De verouderde krijgt() functie wordt vervangen door het veiligere fgets() functie , dat beveiligingsfouten oplost die worden veroorzaakt door bufferoverlopen . Het zorgt ervoor dat de invoerreeks niet groter wordt dan toegestaan, waardoor potentiële problemen met geheugenbeschadiging worden vermeden.

De meegeleverde voorbeeldcode laat zien hoe u deze kunt gebruiken fgets() correct om gebruikersinvoer vast te leggen en het nieuweregelteken te verwijderen als dit verschijnt. Het benadrukt hoe cruciaal het is om rekening te houden met invoerbeperkingen en om te gaan met nieuweregeltekens om nauwkeurige tekenreeksverwerking te garanderen.

Ontwikkelaars kunnen hiermee de veiligheid en robuustheid van hun C-programma's verbeteren fgets() . Ze kunnen onverwacht gedrag en potentiële inbreuken op de beveiliging als gevolg van grote invoer vermijden door een maximale grootte voor invoer te definiëren.

Java-vergelijking

Aspirant-C-programmeurs moeten hiermee vertrouwd raken fgets() en de bijbehorende gebruiksinstructies om een ​​veilige en effectieve invoerverwerking te garanderen. Ontwikkelaars die zich bewust zijn van deze functie kunnen betrouwbaardere en veiligere software produceren die bescherming biedt tegen invoergerelateerde kwetsbaarheden die vaak voorkomen.