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.
entidad relacional
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.
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; }
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.
corte
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.
pagar con git
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