Jinsi ya Kutumia fgets() katika C: Usimamizi Salama wa Ingizo la Kamba kwa Mifano ya Kivitendo

1. Utangulizi

Kazi ya fgets ni kazi ya maktaba ya kawaida katika C inayotumika kusoma maandishi kwa usalama. Inatumika sana kama mbadala salama wa kazi ya jadi gets. Katika makala hii, tutaelezea jinsi ya kutumia fgets, kujadili faida na hasara zake, na kutoa vidokezo vya vitendo kwa usimamizi salama wa ingizo.

2. Matumizi ya Msingi ya fgets

2.1 Sarufi na Vigezo vya fgets

Sarufi ya msingi ya fgets ni kama ifuatavyo:

char *fgets(char *str, int n, FILE *stream);
  • str : Buffeti ambapo kamba ya ingizo itahifadhiwa
  • n : Idadi ya juu ya herufi za kusoma (ukubwa wa buffeti)
  • stream : Mtiririko wa ingizo (kwa kawaida stdin)

2.2 Mfano wa Msimbo

Hapa kuna mfano wa msingi wa kutumia fgets:

char buffer[50];
fgets(buffer, 50, stdin);
printf("Entered string: %s", buffer);

Msimbo huu unasoma hadi herufi 49 kutoka kwa mtumiaji (50 ikiwa ni pamoja na terminator ya null) na kuchapisha matokeo.

侍エンジニア塾

3. Faida na Hasara za fgets

3.1 Usalama Ikilinganishwa na gets

Kazi ya gets inaweza kusababisha upitishaji wa buffeti na ina hatari kubwa za usalama. Kinyume chake, fgets inakuwezesha kubainisha idadi ya juu ya herufi za kusoma, kuzuia upitishaji wa buffeti.

3.2 Kushughulikia Herufi za Mstari Mpya na Masuala ya Buffeti

Kwa sababu fgets inajumuisha herufi ya mstari mpya wakati wa kusoma ingizo, kamba zako zinaweza kuwa na mistari mipya isiyotarajiwa. Zaidi ya hayo, ikiwa ingizo linazidi ukubwa wa buffeti, data iliyobaki itabaki katika mtiririko wa ingizo.

4. Mbinu za Usimamizi Salama wa Ingizo

4.1 Kuondoa Herufi ya Mstari Mpya

Kamba zinazosomwa kwa fgets zinaweza kujumuisha herufi ya mstari mpya. Ili kuiondoa, ongeza msimbo ufuatao:

char *newline = strchr(buffer, 'n');
if (newline) {
    *newline = '';
}

Msimbo huu hubadilisha herufi ya mstari mpya na terminator ya null, ukisafisha kamba.

4.2 Kusafisha Buffeti

Ikiwa ingizo la mtumiaji linazidi ukubwa wa buffeti, herufi za ziada zinaweza kubaki katika mtiririko wa ingizo. Ili kusafisha data iliyobaki, ongeza mchakato ufuatao:

while ((getchar()) != 'n' && !feof(stdin));

Mzunguko huu husafisha mtiririko wa ingizo hadi upate mstari mpya au mwisho wa faili.

5. Vidokezo Muhimu Unapotumia fgets

5.1 Usimamizi wa Makosa na Vitu Vya Ajali

fgets hurudisha kiashiria ikiwa imefaulu na NULL ikiwa imeshindwa. Usimamizi sahihi wa makosa ni muhimu unapofanya kazi na fgets.

if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
    // Error handling
}

5.2 Mazoea Mazuri

Unapotumia fgets, daima zingatia ukubwa wa buffeti na usimamizi wa makosa. Thibitisha ingizo lako na tahadhari dhidi ya upitishaji wa buffeti ili kuweka msimbo wako salama.

6. Mfano wa Msimbo wa Vitendo kwa Kutumia fgets

6.1 Uthibitishaji wa Ingizo na Usafi

Uthibitishaji wa ingizo na usafi ni muhimu wakati wa kuchakata ingizo la mtumiaji. Msimbo ufuatao unakubali ingizo la nambari pekee:

char input[10];
if (fgets(input, sizeof(input), stdin) != NULL) {
    // Remove newline character
    char *newline = strchr(input, 'n');
    if (newline) {
        *newline = '';
    }

    // Accept only numbers
    if (strspn(input, "0123456789") == strlen(input)) {
        printf("Entered number: %sn", input);
    } else {
        printf("Invalid input. Please enter numbers only.n");
    }
}

7. Hitimisho

Kazi ya fgets ni chombo rahisi kwa kusoma maandishi kwa usalama katika C. Ikilinganishwa na gets, inapunguza kwa kiasi kikubwa hatari ya upitishaji wa buffeti. Hata hivyo, kushughulikia herufi za mstari mpya na kusafisha buffeti ipasavyo ni muhimu unapotumia fgets. Tumia mbinu zilizowasilishwa katika makala hii kutekeleza usindikaji salama na wa ufanisi wa ingizo katika programu zako.

年収訴求