logo

Iebūvētās bibliotēkas funkcijas lietotāja ievadei | sscanf, scanf_s, fscanf_s, sscanf_s

C programmēšanas valoda nodrošina dažādas iebūvētas bibliotēkas funkcijas lietotāja ievadei. Šajā rakstā mēs uzzināsim par sscanf scanf_s fscanf_s sscanf_s bibliotēkas funkcijām programmā C.

1. sscanf() funkcija C valodā

sscanf () tiek izmantots, lai nolasītu formatētu ievadi no virknes. Abas funkcijas scanf () un sscanf () ir līdzīgas, vienīgā atšķirība starp tām ir tāda, ka funkcija scanf () nolasa lietotāja ievadītos datus no standarta ievades, piemēram, tastatūras, un funkcija sscanf () nolasa ievadi no virknes un saglabā ievadi citā virknē.

Sintakse

int   sscanf   ( const char *   str   const char *   format   ...);

Parametri

    str: ievades virkne, no kuras mēs vēlamies nolasīt datus.formātā: virkne, kas satur tipa norādītāju(-us).… (elipse): norāda, ka funkcija pieņem mainīgu argumentu skaitu.

Atdeves vērtība

  • Ja funkcija ir veiksmīga, funkcija atgriež veiksmīgi nolasīto vērtību skaitu.
  • Ievades kļūmes gadījumā pirms datu sekmīgas nolasīšanas tiek atgriezta EOF.

Piezīme : šiem argumentiem ir jābūt vismaz tik daudz, cik formāta norādītāju saglabāto vērtību skaits.



Piemērs: C Programma sscanf funkcijas ilustrēšanai

C
// C program to illustrate sscanf statement #include  int main() {  // declaring array s  char s[] = '3 red balls 2 blue balls';  char str[10] str2[10];  int i;  // %*s is used to skip a word  sscanf(s '%d %*s %*s %*s %s %s' &i str str2);  printf('%d %s %s n' i str str2);  return 0; } 

Izvade
3 blue balls 

2. Scanf_s() Funkcija C

Šī funkcija ir raksturīga Microsoft kompilatoriem. Tas ir tāds pats kā scanf, izņemot to, ka tas neizraisa bufera pārslodzi. Funkcija scanf_s() ir drošāka nekā funkcija scanf(), jo tā nodrošina papildu parametru, lai norādītu bufera lielumu, kas var izvairīties no bufera pārpildes.

java vērtība enum

Sintakse

int   scanf_s  (const char *format [argument]...);

Parametri

    straume: norādiet uz objektu Fails, kas identificē straumi.formātā: tā ir virkne, kas satur tipa norādītāju(-us).… (elipse): norāda, ka funkcija pieņem mainīgu argumentu skaitu.

Piezīme : Šeit mēs varam norādīt bufera lielumu un faktiski kontrolēt ievades ierobežojumu, lai visa lietojumprogramma netiktu avarēta atmiņas pārpildes dēļ.

Atdeves vērtība

  • Veiksmes gadījumā funkcija atgriež nolasīto vērtību skaitu.
  • Ievades kļūmes gadījumā pirms datu sekmīgas nolasīšanas tiek atgriezta EOF.

Kāpēc izmantot scanf_s()?

scanf vienkārši nolasa jebkuru ievadi, kas tiek nodrošināta no konsoles. C nepārbauda, ​​vai lietotāja ievadītā informācija ietilps jūsu norādītajā mainīgajā. Ja jums ir masīvs ar nosaukumu color[3] un jūs izmantojat scanf virknei Red, tas darbosies labi, bet, ja lietotājs ievadīs vairāk nekā 3 rakstzīmes, scanf sāk rakstīt atmiņā, kas nepieder krāsu masīvam.

C to neuztvers vai nebrīdinās, un tas var vai nevar avarēt programmu atkarībā no tā, vai kaut kas mēģina piekļūt un rakstīt šajā atmiņas slotā, kas nepieder krāsu masīvam. Šeit tiek izmantots scanf_s. scanf_s pārbauda, ​​vai lietotāja ievadītā informācija ietilps dotajā atmiņas vietā.

Piezīme : scanf_s() darbosies tikai programmā Microsoft Visual Studio.

1. piemērs: C programma sscanf_s funkcijas ilustrēšanai

C
// C program to illustrate sscanf_s statement // scanf_s() will only work in Microsoft Visual Studio. #include  #include  int main() {  char a[5];  // sizeof(a) is buffer size  scanf_s('%s' a sizeof(a));  printf('n%s ' a);  return 0; } 


1. ievade

funkcijas c
Red

1. izvads

Red

2. ievade

Yellow

2. izvads

No Output

2. piemērs: C programma, kas ilustrē saistību starp bufera lielumu un masīva lielumu.

C++
// C++ program // consumes the Enter key // (newline character) pressed after input #include  int main() {  // example  char ch[100000];  printf('Enter characters: ');  scanf_s('%s' ch 99999);  getchar();  return 0; } 
C
// C program // consumes the Enter key // (newline character) pressed after input #include  int main() {  char ch[100000];  printf('Enter characters: ');  scanf_s('%s' ch 99999);  getchar();  return 0; } 
  • Ja bufera izmērs ir vienāds ar masīva lielumu vai mazāks par to, ievadot lielāku vai vienādu ar bufera lielumu, tiks zaudēti dati, jo liekie dati tiks saīsināti un tiks nolasīti dati līdz bufera izmēram - 1.
  • Ja bufera izmērs ir lielāks par masīva lielumu, tad
    • ievadot mazāku par bufera lielumu, izdosies, taču tiks parādīta kļūda
    • ievadot lielāku par bufera lielumu, tas novedīs pie bufera pārpildes un radīs tādu pašu kļūdu.

3. fscanf_s() funkcija C

Atšķirība starp fscanf() un fscanf_s() ir tāda pati kā starp scanf() un scanf_s(). fscanf_s() ir droša funkcija, kas prasa katra c C s S un [ ] tipa lauka lielumu nodot kā argumentu tūlīt aiz mainīgā.

Sintakse

int fscanf_s( FILE *stream const char *format [argument ]... );

Parametri

    str: virkne, ko izmanto datu izgūšanaiformātā: virkne, kas satur tipa norādītāju(s)… (elipse): norāda, ka funkcija pieņem mainīgu argumentu skaitu.

Piezīme : fscanf_s ir papildu parametrs, lai norādītu bufera lielumu un faktiski kontrolētu ievades ierobežojumu.

iegūt pašreizējo datumu java

Atdeves vērtība

  • Ja funkcija ir veiksmīga, funkcija atgriež veiksmīgi nolasīto vērtību skaitu.
  • Ievades kļūmes gadījumā pirms datu sekmīgas nolasīšanas tiek atgriezta EOF.

Piezīme : fscanf_s darbosies tikai MS Visual studio.

Piemērs: C programma fscanf_s funkcijas ilustrēšanai

C
// C program to illustrate fscanf_s statement // This program will run on MS Visual studio #include  #include  int main() {  char s1[10] s2[10] s3[10];  int year;  // file pointer  FILE* fp;  // Open file securely  fopen_s(&fp 'file.txt' 'w+');  fputs('Hello World its 2017' fp);  rewind(fp);  // Using fscanf_s  fscanf_s(fp '%s' s1 sizeof(s1));  fscanf_s(fp '%s' s2 sizeof(s2));  fscanf_s(fp '%s' s3 sizeof(s3));  fscanf_s(fp '%d' &year sizeof(year));  printf('String1 |%s|n' s1);  printf('String2 |%s|n' s2);  printf('String3 |%s|n' s3);  printf('Integer |%d|n' year);  fclose(fp);  return (0); } 


Izvade

String1 |Hello| String2 |World| String3 |its| Integer |2017|

4. sscanf_s() funkcija C

sscanf_s() ir sscanf() droša funkcija, un drošām funkcijām ir nepieciešams, lai katra c C s S un [ tipa lauka lielums tiktu nodots kā arguments tūlīt aiz mainīgā.

lasot csv failu java

Sintakse

int   sscanf_s  (const char *  restrict buffer   const char *  restrict format   ...);

Parametri

    str: virkne, ko izmanto datu izgūšanaiformātā: virkne, kas satur tipa norādītāju(s)… (elipse): norāda, ka funkcija pieņem mainīgu argumentu skaitu.

Piezīme : sscanf_s ir papildu parametrs, lai norādītu bufera lielumu un faktiski kontrolētu ievades ierobežojumu.

Atdeves vērtība

  • Ja funkcija ir veiksmīga, funkcija atgriež veiksmīgi nolasīto vērtību skaitu.
  • Ievades kļūmes gadījumā pirms datu sekmīgas nolasīšanas tiek atgriezta EOF.

Piezīme : sscanf_s() darbosies tikai programmā Microsoft Visual Studio.

Piemērs: C programma sscanf_s funkcijas ilustrēšanai

C
// C program to illustrate sscanf_s statement // This program will run on MS Visual studio #include  int main() {  char s[] = '3 red balls 2 blue balls';  char str[10] str2[10];  int i;  // %*s is used to skip a word  sscanf_s(s '%d' &i sizeof(i));  sscanf_s(s '%*d %*s %*s %*s %s' str sizeof(str));  sscanf_s(s '%*d %*s %*s %*s %*s %s' str2  sizeof(str2));  printf('%d %s %s n' i str str2);  return 0; } 


Izvade

3 blue balls

Izveidojiet viktorīnu