Funciones de biblioteca incorporadas para entrada del usuario | sscanf, scanf_s, fscanf_s, sscanf_s
El lenguaje de programación C proporciona varias funciones de biblioteca incorporadas para la entrada del usuario. En este artículo aprenderemos sobre las funciones de la biblioteca sscanf scanf_s fscanf_s sscanf_s en C.
1. Función sscanf() en C
sscanf() se utiliza para leer la entrada formateada de la cadena. Ambas funciones scanf() y sscanf() son similares, la única diferencia entre ellas es que la función scanf() lee la entrada del usuario desde la entrada estándar como un teclado y la función sscanf() lee la entrada de una cadena y almacena la entrada en otra cadena.
Sintaxis
int sscanf ( const char * str const char * format ...);
Parámetros
- En caso de éxito, la función devuelve el número de valores leídos correctamente.
- En el caso de un error de entrada antes de que se pueda leer correctamente cualquier dato, se devuelve EOF.
- En caso de éxito, la función devuelve el número de valores leídos.
- En el caso de un error de entrada antes de que se pueda leer correctamente cualquier dato, se devuelve EOF.
- Si el tamaño del búfer es igual o menor que el tamaño de la matriz, ingresar un tamaño mayor o igual al tamaño del búfer provocará la pérdida de datos, ya que los datos sobrantes se truncarán y se leerán los datos hasta el tamaño del búfer - 1.
- Si el tamaño del búfer es mayor que el tamaño de una matriz, entonces
- ingresar un tamaño menor que el tamaño del búfer funcionará pero dará un error
- ingresar un tamaño mayor que el del búfer provocará un desbordamiento del búfer y generará el mismo error.
- En caso de éxito, la función devuelve el número de valores leídos correctamente.
- En el caso de un error de entrada antes de que se pueda leer correctamente cualquier dato, se devuelve EOF.
- En caso de éxito, la función devuelve el número de valores leídos correctamente.
- En el caso de un error de entrada antes de que se pueda leer correctamente cualquier dato, se devuelve EOF.
Valor de retorno
Nota : Debe haber al menos tantos de estos argumentos como el número de valores almacenados por los especificadores de formato.
Ejemplo: Programa C para ilustrar la función 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 ; }
Producción
3 blue balls
2. Función scanf_s() en C
Esta función es específica de los compiladores de Microsoft. Es lo mismo que scanf excepto que no provoca una sobrecarga del búfer. La función scanf_s() es más segura que la función scanf() ya que proporciona un parámetro adicional para especificar el tamaño del búfer que puede evitar el desbordamiento del búfer.
Sintaxis
int scanf_s (const char *format [argument]...);
Parámetros
Nota : Aquí podemos especificar el tamaño del búfer y controlar el límite de la entrada para que toda la aplicación no falle debido al desbordamiento de la memoria.
Valor de retorno
¿Por qué utilizar scanf_s()?
scanf simplemente lee cualquier entrada proporcionada desde la consola. C no verifica si la entrada del usuario encajará en la variable que usted ha designado. Si tiene una matriz llamada color[3] y usa scanf para la cadena Red, funcionará bien, pero si el usuario ingresa más de 3 caracteres, scanf comienza a escribir en la memoria que no pertenece a la matriz de colores.
C no detectará esto ni le advertirá y podría bloquear o no el programa dependiendo de si algo intenta acceder y escribir en esa ranura de memoria que no pertenece a la matriz de colores. Aquí es donde entra en juego scanf_s. scanf_s verifica que la entrada del usuario encaje en el espacio de memoria dado.
Nota : scanf_s() solo funcionará en Microsoft Visual Studio.
Ejemplo 1: Programa C para ilustrar la función 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 ; }
Entrada 1
Red
Salida 1
Red
Entrada 2
Yellow
Salida 2
No Output
Ejemplo 2: Programa C para ilustrar la relación entre el tamaño del búfer y el tamaño de la matriz.
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. Función fscanf_s() en C
La diferencia entre fscanf() y fscanf_s() es la misma que la de scanf() y scanf_s(). fscanf_s() es una función segura que requiere que el tamaño de cada campo de tipo c C s S y [ ] se pase como argumento inmediatamente después de la variable.
Sintaxis
int fscanf_s( FILE *stream const char *format [argument ]... );
Parámetros
Nota : fscanf_s tiene un parámetro adicional para especificar el tamaño del búfer y controlar el límite de la entrada.
Valor de retorno
Nota : fscanf_s funcionará sólo en MS Visual Studio.
Ejemplo: programa en C para ilustrar la función 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 ); }
Producción
String1 |Hello| String2 |World| String3 |its| Integer |2017|
4. Función sscanf_s() en C
sscanf_s() es una función segura de sscanf() y las funciones seguras requieren que el tamaño de cada campo c C s S y [ tipo se pase como argumento inmediatamente después de la variable.
Sintaxis
int sscanf_s (const char * restrict buffer const char * restrict format ...);
Parámetros
Nota : sscanf_s tiene un parámetro adicional para especificar el tamaño del búfer y controlar el límite de la entrada.
Valor de retorno
Nota : sscanf_s() solo funcionará en Microsoft Visual Studio.
Ejemplo: programa en C para ilustrar la función 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 ; }
Producción
3 blue balls
Crear cuestionario
Te Puede Gustar
Artículos Más Populares
Categoría
Artículos De Interés