logo

Funkcja fgets() w C

W programowaniu C, obsługa wejście I wyjście działania są niezbędne. Fgets() jest jedną z wielu dostępnych funkcji wejście . Za pomocą tej solidnej funkcji programiści mogą bezpiecznie i precyzyjnie odczytać informacje z danego strumienia. W tym artykule przeanalizujemy w I outy z fgets() , przeglądając je składnia, zastosowanie, przykładowy kod , I oczekiwane rezultaty .

The funkcja fgets(). , skrót od „plik pobierz ciąg” , jest często używany do odczytania ciągu ze strumienia pliku lub wejście standardowe (stdin) . Zapewnia bezpieczniejszy substytut przestarzałych rozwiązań funkcja pobiera(). , który był wcześniej używany, ale obecnie stwarza zagrożenie dla bezpieczeństwa. Funkcja fgets() oferuje sposób ograniczenia liczby odczytywanych znaków i skutecznie obsługuje znaki nowej linii.

Składnia fgets() jest następująca:

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

Parametry są podzielone w następujący sposób:

str: Jest to odniesienie do tablicy znaków (stringu), która będzie używana do przechowywania danych wejściowych.

rozmiar: Całkowita liczba znaków (łącznie z znak zerowy „0” ) to można przeczytać.

strumień: Urządzenie wskazujące strumień pliku wejściowego lub stdin To fgets() będę czytać z.

Aby lepiej zrozumieć działanie fgets(), spójrzmy na przykład:

Przykład:

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

Wyjście:

 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: 

Wyjaśnienie:

W powyższym przykładzie zaczynamy od włączenia odpowiedniego pliku nagłówkowego, „stdio.h” . Następnie ciąg wejściowy jest definiowany jako wejściowa tablica znaków o rozmiarze 100.

Za pomocą funkcja printf(). , program prosi użytkownika o wprowadzenie ciągu znaków. Po tym, stdin jest używany jako strumień wejściowy , I fgets() jest używany z wejściem jako ciągiem docelowym, rozmiar(wejście) i maksymalny rozmiar do odczytania. Następnie program używa printf() aby wyprowadzić wprowadzony ciąg.

Fgets() funkcja może Czytać I ratować znak nowej linii 'N' jeśli pojawi się przed osiągnięciem maksymalnego rozmiaru. Umożliwia stwierdzenie, czy linia wejściowa została odczytana w całości, czy obcięta ze względu na ograniczenia przestrzenne.

Przykład:

Używając zmodyfikowanego fragmentu kodu, możesz użyć metoda strcspn(). Do usuwać the Nowa linia znak z ciągu wejściowego:

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

Wyjście:

 Enter a string: Hello World You entered: Hello World 

Wyjaśnienie:

Długość podciągu składającego się ze znaków spoza dostarczonego zestawu znaków jest określana przez funkcja strcspn(). . W tym przypadku znak zerowy „0” służy do zastąpienia znaku nowej linii po określeniu 'N' jako zbiór znaków do wyszukania.

Wniosek:

Podsumowując, lektura ciągi wejściowe ze strumieni plików lub standardowego wejścia przy użyciu języka C metoda fgets(). jest niezawodny i bezpieczny. Jest to przydatne narzędzie do przetwarzania danych wejściowych użytkownika w regulowany sposób, ponieważ pozwala wybrać maksymalny rozmiar danych wejściowych i obsługuje znaki nowej linii.

Przestarzałe funkcja pobiera(). zostaje zastąpiony bezpieczniejszym funkcja fgets(). , który naprawia luki w zabezpieczeniach spowodowane przez przepełnienia bufora . Zapewnia, że ​​ciąg wejściowy nie stanie się większy niż jest to dozwolone, co pozwala uniknąć potencjalnych problemów z uszkodzeniem pamięci.

Podany przykładowy kod pokazuje, jak używać fgets() poprawnie, aby przechwycić dane wprowadzone przez użytkownika i usunąć znak nowego wiersza, jeśli się pojawi. Podkreśla, jak ważne jest uwzględnienie ograniczeń wejściowych i radzenie sobie ze znakami nowej linii, aby zapewnić dokładne przetwarzanie ciągów.

Programiści mogą poprawić bezpieczeństwo i niezawodność swoich programów w języku C za pomocą fgets() . Mogą uniknąć nieoczekiwanych zachowań i potencjalnych naruszeń bezpieczeństwa spowodowanych dużymi danymi wejściowymi, definiując maksymalny rozmiar danych wejściowych.

Początkujący programiści C powinni się z nim zapoznać fgets() oraz instrukcje użytkowania, aby zapewnić bezpieczną i efektywną obsługę danych wejściowych. Programiści znający tę funkcję mogą tworzyć bardziej niezawodne i bezpieczne oprogramowanie, które chroni przed często spotykanymi lukami w zabezpieczeniach związanych z danymi wejściowymi.