Езикът за програмиране 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
Създаване на тест