logo

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

    cadena: Cadena de entrada de la que queremos leer datos.formato: una cadena que contiene los especificadores de tipo.… (elipsis): Indica que la función acepta un número variable de argumentos.

Valor de retorno

  • 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.

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.

entidad relacional

Sintaxis

int   scanf_s  (const char *format [argument]...);

Parámetros

    arroyo: Puntero al objeto Archivo que identifica la secuencia.formato: Es una cadena que contiene los especificadores de tipo.… (elipsis): Indica que la función acepta un número variable de argumentos.

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

  • 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.

¿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.

java int en cadena

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; } 
  • 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.

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

    cadena: cadena utilizada para recuperar datosformato: cadena que contiene los especificadores de tipo… (elipsis): Indica que la función acepta un número variable de argumentos.

Nota : fscanf_s tiene un parámetro adicional para especificar el tamaño del búfer y controlar el límite de la entrada.

corte

Valor de retorno

  • 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.

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.

pagar con git

Sintaxis

int   sscanf_s  (const char *  restrict buffer   const char *  restrict format   ...);

Parámetros

    cadena: cadena utilizada para recuperar datosformato: cadena que contiene los especificadores de tipo… (elipsis): Indica que la función acepta un número variable de argumentos.

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

  • 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.

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