Presta atención ya que en esta sección vas a encontrar el resultado que buscas.
Solución:
Es una función que pertenece específicamente al compilador de Microsoft.
scanf
originalmente solo lee cualquier entrada de la consola que escriba y la asigna a un tipo de variable.
si tienes un array llamó first_name[5]
y usas scanf
para “Alex”, no hay problema. si tienes lo mismo array y asigna “Alexander”, puedes ver que excede las 5 ranuras que el array contiene, por lo que C aún lo escribirá en la memoria que no pertenece al array y podría o no bloquear el programa, dependiendo de si algo intenta acceder y escribir en esa ranura de memoria que no pertenece a first_name. Aquí es donde scanf_s
viene en.
scanf_s
tiene un argumento (parámetro) donde puede especificar el tamaño del búfer y, de hecho, controlar el límite de la entrada para que no bloquee todo el edificio.
scanf_s()
no está descrito por el Estándar C99 (o anteriores).
Si desea utilizar un compilador que apunta a C99 (o anterior), use scanf()
.
Para C11 Standard (y eventualmente posteriores) scanf_s()
es mucho más difícil de usar que scanf()
para mejorar la seguridad contra desbordamientos de búfer.
C11 fscanf_s()
: http://port70.net/~nsz/c/c11/n1570.html#K.3.5.3.2
~~~~~~~~~~~~~~~~
Si tiene un compilador C99 con extras que proporciona scanf_s()
como una extensión y no le importa perder la portabilidad, consulte la documentación de su compilador.