Kullanıcı Girişi için dahili kütüphane fonksiyonları | sscanf, scanf_s, fscanf_s, sscanf_s
C Programlama Dili, Kullanıcı Girişi için çeşitli Dahili Kütüphane İşlevleri sağlar. Bu yazıda C'deki sscanf scanf_s fscanf_s sscanf_s Kütüphane Fonksiyonlarını öğreneceğiz.
1. C'de sscanf() Fonksiyonu
sscanf(), dizeden biçimlendirilmiş girişi okumak için kullanılır. Scanf() ve sscanf() fonksiyonlarının her ikisi de benzerdir; aralarındaki tek fark, scanf() fonksiyonunun kullanıcıdan gelen girişi klavye gibi standart girişten okuması ve sscanf() fonksiyonunun bir dizeden girişi okuması ve girişi başka bir dizede saklamasıdır.
Sözdizimi
int sscanf ( const char * str const char * format ...);
Parametreler
- Başarı durumunda fonksiyon başarıyla okunan değerlerin sayısını döndürür.
- Herhangi bir veri başarıyla okunmadan önce bir giriş hatası olması durumunda EOF döndürülür.
- Başarı durumunda fonksiyon okunan değerlerin sayısını döndürür.
- Herhangi bir veri başarıyla okunamadan önce bir giriş hatası olması durumunda EOF döndürülür.
- Arabellek boyutu dizinin boyutuna eşit veya ondan küçükse, arabellek boyutundan büyük veya ona eşit girilmesi, fazla veri kesileceğinden ve arabellek boyutu - 1'e kadar olan veriler okunacağından veri kaybına yol açacaktır.
- Tampon boyutu bir dizinin boyutundan büyükse o zaman
- Arabellek boyutundan daha küçük bir giriş yapmak işe yarayacak ancak hata verecektir
- Arabellek boyutundan daha büyük bir değer girilmesi, arabellek taşmasına neden olur ve aynı hatayı verir.
- Başarı durumunda fonksiyon başarıyla okunan değerlerin sayısını döndürür.
- Herhangi bir veri başarıyla okunamadan önce bir giriş hatası olması durumunda EOF döndürülür.
- Başarı durumunda fonksiyon başarıyla okunan değerlerin sayısını döndürür.
- Herhangi bir veri başarıyla okunamadan önce bir giriş hatası olması durumunda EOF döndürülür.
Dönüş Değeri
Not : Bu argümanlardan en az format belirticilerin sakladığı değer sayısı kadar olmalıdır.
Örnek: sscanf Fonksiyonunu Gösteren C Programı
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 ; }
Çıkış
3 blue balls
2. C'de scanf_s() Fonksiyonu
Bu işlev Microsoft derleyicilerine özeldir. Arabellek aşırı yüklenmesine neden olmaması dışında scanf ile aynıdır. scanf_s() işlevi, arabellek taşmasını önleyebilecek arabellek boyutunu belirtmek için ek bir parametre sağladığından scanf() işlevinden daha güvenlidir.
Sözdizimi
int scanf_s (const char *format [argument]...);
Parametreler
Not : Burada arabellek boyutunu belirleyebilir ve aslında giriş sınırını kontrol edebiliriz, böylece tüm uygulama bellek taşması nedeniyle çökmez.
Dönüş Değeri
Neden scanf_s() kullanılmalı?
scanf sadece konsoldan sağlanan girişi okur. C, kullanıcı girişinin belirlediğiniz değişkene uyup uymayacağını kontrol etmez. color[3] adında bir diziniz varsa ve Red dizisi için scanf kullanırsanız düzgün çalışır ancak kullanıcı 3'ten fazla karakter girerse scanf, color dizisine ait olmayan belleğe yazmaya başlar.
C bunu yakalamaz veya sizi uyarmaz ve renk dizisine ait olmayan bir şeyin o bellek yuvasına erişmeye ve yazmaya çalışmasına bağlı olarak programın çökmesine neden olabilir veya olmayabilir. Scanf_s'nin devreye girdiği yer burasıdır. scanf_s, kullanıcı girişinin verilen bellek alanına sığıp sığmayacağını kontrol eder.
Not : scanf_s() yalnızca Microsoft Visual Studio'da çalışacaktır.
Örnek 1: sscanf_s İşlevini Gösteren C Programı
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 ; }
Giriş 1
Red
Çıkış 1
Red
Giriş 2
Yellow
Çıkış 2
No Output
Örnek 2: Tampon boyutu ile dizi boyutu arasındaki ilişkiyi gösteren C Programı.
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. C'de fscanf_s() İşlevi
fscanf() ve fscanf_s() arasındaki fark, scanf() ve scanf_s() ile aynıdır. fscanf_s(), her c C s S ve [ ] tipi alanın boyutunun, değişkenin hemen ardından bir argüman olarak iletilmesini gerektiren güvenli bir işlevdir.
Sözdizimi
int fscanf_s( FILE *stream const char *format [argument ]... );
Parametreler
Not : fscanf_s, arabellek boyutunu belirtmek ve gerçekte giriş sınırını kontrol etmek için ekstra bir parametreye sahiptir.
Dönüş Değeri
Not : fscanf_s yalnızca MS Visual Studio'da çalışacaktır.
Örnek: fscanf_s İşlevini Gösteren C Programı
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 ); }
Çıkış
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. C'de sscanf_s() İşlevi
sscanf_s(), sscanf()'ın güvenli işlevidir ve güvenli işlevler, her c C s S ve [ tipi alanının boyutunun, değişkenin hemen ardından bir argüman olarak iletilmesini gerektirir.
Sözdizimi
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parametreler
Not : sscanf_s, arabellek boyutunu belirtmek ve gerçekte giriş sınırını kontrol etmek için ekstra bir parametreye sahiptir.
Dönüş Değeri
Not : sscanf_s() yalnızca Microsoft Visual Studio'da çalışacaktır.
Örnek: sscanf_s İşlevini Gösteren C Programı
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 ; }
Çıkış
3 blue balls
Test Oluştur