Вбудовані бібліотечні функції для введення користувача | sscanf, scanf_s, fscanf_s, sscanf_s
Мова програмування C надає різні вбудовані бібліотечні функції для введення користувачами. У цій статті ми дізнаємося про бібліотечні функції sscanf scanf_s fscanf_s sscanf_s у C.
1. Функція sscanf() у C
sscanf() використовується для читання форматованого введення з рядка. Функції scanf() і sscanf() подібні, єдина різниця між ними полягає в тому, що функція scanf() зчитує введені дані від користувача зі стандартного введення, як з клавіатури, а функція sscanf() зчитує вхідні дані з рядка та зберігає введені дані в іншому рядку.
Синтаксис
int sscanf ( const char * str const char * format ...);
Параметри
- У разі успіху функція повертає кількість успішно прочитаних значень.
- У разі помилки введення до того, як дані можуть бути успішно прочитані, повертається EOF.
- У разі успіху функція повертає кількість прочитаних значень.
- У разі помилки введення до того, як будь-які дані можна було успішно прочитати, повертається EOF.
- Якщо розмір буфера дорівнює або менше розміру масиву, тоді введення, що перевищує або дорівнює розміру буфера, призведе до втрати даних, оскільки надлишок даних буде скорочено, а дані до розміру буфера - 1 будуть зчитані.
- Якщо розмір буфера більший за розмір масиву, тоді
- введення, менше розміру буфера, спрацює, але дасть помилку
- введення, що перевищує розмір буфера, призведе до переповнення буфера та дасть ту саму помилку.
- У разі успіху функція повертає кількість успішно прочитаних значень.
- У разі помилки введення до того, як будь-які дані можна було успішно прочитати, повертається EOF.
- У разі успіху функція повертає кількість успішно прочитаних значень.
- У разі помилки введення до того, як будь-які дані можна було успішно прочитати, повертається EOF.
Повернене значення
Примітка : цих аргументів має бути принаймні стільки, скільки значень зберігають специфікатори формату.
Приклад: програма на C для ілюстрації функції sscanf
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 ; }
Вихід
3 blue balls
2. Функція scanf_s() у C
Ця функція є специфічною для компіляторів Microsoft. Це те саме, що і scanf, за винятком того, що він не викликає перевантаження буфера. Функція scanf_s() є більш безпечною, ніж функція scanf(), оскільки вона надає додатковий параметр для визначення розміру буфера, який може уникнути переповнення буфера.
Синтаксис
int scanf_s (const char *format [argument]...);
Параметри
Примітка : Тут ми можемо вказати розмір буфера та фактично контролювати обмеження введення, щоб уся програма не аварійно завершувала роботу через переповнення пам’яті.
Повернене значення
Навіщо використовувати scanf_s()?
scanf просто читає будь-який вхід, наданий з консолі. C не перевіряє, чи введені користувачем дані вміщаються в змінну, яку ви призначили. Якщо у вас є масив під назвою color[3] і ви використовуєте scanf для рядка Red, він працюватиме добре, але якщо користувач вводить більше 3 символів, scanf починає записувати в пам’ять, яка не належить до масиву кольорів.
C не вловить це чи не попередить вас, і він може призвести до збою програми залежно від того, чи спробує щось отримати доступ і записати в цей слот пам’яті, який не належить до масиву кольорів. Ось де в гру вступає scanf_s. scanf_s перевіряє, чи введені користувачем дані вміщуються в заданий простір пам’яті.
Примітка : scanf_s() працюватиме лише в Microsoft Visual Studio.
Приклад 1: програма на C для ілюстрації функції sscanf_s
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
Red
Вихід 1
Red
Вхід 2
Yellow
Вихід 2
No Output
Приклад 2: Програма на C для ілюстрації співвідношення між розміром буфера та розміром масиву.
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 ; }
3. Функція fscanf_s() у C
Різниця між fscanf() і fscanf_s() така ж, як і scanf() і scanf_s(). fscanf_s() є безпечною функцією, яка вимагає, щоб розмір кожного поля типу c C s S і [] передавався як аргумент безпосередньо після змінної.
Синтаксис
int fscanf_s( FILE *stream const char *format [argument ]... );
Параметри
Примітка : fscanf_s має додатковий параметр для визначення розміру буфера та фактичного контролю обмеження введення.
Повернене значення
Примітка : fscanf_s буде працювати тільки в MS Visual Studio.
Приклад: програма на C для ілюстрації функції fscanf_s
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 ); }
Вихід
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. Функція sscanf_s() у C
sscanf_s() є захищеною функцією sscanf(), і безпечні функції вимагають, щоб розмір кожного поля c C s S і [ type передавався як аргумент безпосередньо після змінної.
Синтаксис
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Параметри
Примітка : sscanf_s має додатковий параметр для визначення розміру буфера та фактичного контролю обмеження введення.
Повернене значення
Примітка : sscanf_s() працюватиме лише в Microsoft Visual Studio.
Приклад: програма на C для ілюстрації функції sscanf_s
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 ; }
Вихід
3 blue balls
Створіть вікторину
Вам Може Сподобатися
Кращі Статті
Категорія
Цікаві Статті