Програмски језик Ц пружа различите функције уграђене библиотеке за кориснички унос. У овом чланку ћемо научити о функцијама библиотеке ссцанф сцанф_с фсцанф_с ссцанф_с у Ц.
1. функција ссцанф() у Ц
ссцанф() се користи за читање форматираног уноса из стринга. Функције сцанф() и ссцанф() су сличне, једина разлика између њих је у томе што функција сцанф() чита унос од корисника са стандардног уноса као што је тастатура, а функција ссцанф() чита унос из стринга и чува унос у другом стрингу.
Синтакса
int sscanf ( const char * str const char * format ...);
Параметерс
- По успеху функција враћа број успешно прочитаних вредности.
- У случају грешке у уносу пре него што се било који податак може успешно прочитати ЕОФ се враћа.
- По успеху функција враћа број прочитаних вредности.
- У случају грешке при уносу пре него што се било који податак може успешно прочитати ЕОФ се враћа.
- Ако је величина бафера једнака или мања од величине низа, онда ће уношење веће или једнако величини бафера довести до губитка података јер ће вишак података бити скраћен и подаци до величине бафера - 1 ће бити прочитани.
- Ако је величина бафера већа од величине низа онда
- уношење мање од величине бафера ће радити, али ће дати грешку
- унос веће од величине бафера ће довести до преливања бафера и дати исту грешку.
- По успеху функција враћа број успешно прочитаних вредности.
- У случају грешке при уносу пре него што се било који податак може успешно прочитати ЕОФ се враћа.
- По успеху функција враћа број успешно прочитаних вредности.
- У случају грешке при уносу пре него што се било који податак може успешно прочитати ЕОФ се враћа.
Повратна вредност
Напомена : Требало би да има најмање онолико ових аргумената колико је број вредности сачуваних у спецификацијама формата.
Пример: Ц програм за илустрацију функције ссцанф
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. функција сцанф_с() у Ц
Ова функција је специфична за Мицрософт компајлере. То је исто што и сцанф осим што не узрокује преоптерећење бафера. Функција сцанф_с() је сигурнија од функције сцанф() јер обезбеђује додатни параметар за одређивање величине бафера који може да избегне преливање бафера.
фонтови за гимп
Синтакса
int scanf_s (const char *format [argument]...);
Параметерс
Напомена : Овде можемо одредити величину бафера и заправо контролисати ограничење уноса како се цела апликација не би срушила због преливања меморије.
Повратна вредност
Зашто користити сцанф_с()?
сцанф само чита било који унос који је обезбеђен са конзоле. Ц не проверава да ли ће се кориснички унос уклопити у променљиву коју сте одредили. Ако имате низ који се зове цолор[3] и користите сцанф за стринг Ред, то ће радити добро, али ако корисник унесе више од 3 карактера, сцанф почиње да уписује у меморију која не припада низу боја.
Ц неће ово ухватити или вас упозорити и може или не мора да сруши програм у зависности од тога да ли нешто покуша да приступи и упише на том меморијском слоту који не припада низу боја. Овде сцанф_с улази у игру. сцанф_с проверава да ли ће кориснички унос стати у дати меморијски простор.
Напомена : сцанф_с() ће радити само у Мицрософт Висуал Студио-у.
Пример 1: Ц програм за илустрацију функције ссцанф_с
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++ 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. фсцанф_с() функција у Ц
Разлика између фсцанф() и фсцанф_с() је иста као код сцанф() и сцанф_с(). фсцанф_с() је безбедна функција која захтева да се величина сваког поља типа ц Ц с С и [ ] прослеђује као аргумент непосредно иза променљиве.
Синтакса
int fscanf_s( FILE *stream const char *format [argument ]... );
Параметерс
Напомена : фсцанф_с има додатни параметар да одреди величину бафера и заправо контролише ограничење уноса.
стринг ти инт
Повратна вредност
Напомена : фсцанф_с ће радити само у МС Висуал студију.
Пример: Ц програм за илустрацију функције фсцанф_с
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. функција ссцанф_с() у Ц
ссцанф_с() је безбедна функција ссцанф() и безбедне функције захтевају да се величина сваког поља ц Ц с С и [ типе прослеђује као аргумент непосредно иза променљиве.
делимична зависност
Синтакса
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Параметерс
Напомена : ссцанф_с има додатни параметар да одреди величину бафера и заправо контролише ограничење уноса.
Повратна вредност
Напомена : ссцанф_с() ће радити само у Мицрософт Висуал Студио-у.
Пример: Ц програм за илустрацију функције ссцанф_с
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
Креирај квиз