utilizar para libreria leer funciona como cadenas c visual-studio scanf tr24731

para - Diferencia entre scanf y scanf_s



scanf c (4)

Es una función que pertenece específicamente al compilador de Microsoft.

scanf originalmente solo lee la entrada de la consola que escribe y la asigna a un tipo de variable.

Si tiene una matriz llamada first_name[5] y usa scanf para "Alex", no hay problema. Si tiene la misma matriz y asigna "Alexander", puede ver que excede las 5 ranuras que contiene la matriz, por lo que C aún la escribirá en la memoria que no pertenece a la matriz y podría o no bloquear el programa , dependiendo si algo intenta acceder y escribir en esa ranura de memoria que no pertenece a first_name. Aquí es donde entra el scanf_s .

scanf_s tiene un argumento (parámetro) donde puede especificar el tamaño del búfer y controlar realmente el límite de la entrada para que no bloquee todo el edificio.

Así que quiero preguntar cuál es la diferencia entre estos dos. Si hay alguno. En la universidad me enseñaron y estoy usando scanf, pero en mi computadora personal el estudio visual continúa enviando esta advertencia.

error C4996: ''scanf'': This function or variable may be unsafe. Consider using scanf_s instead.

Y tengo que cambiar todo scanf a scanf_s o el programa no se compilará. (Estoy usando la versión más reciente de ms visual studio de 2013)


Lo que puedes hacer para evitar este error es pegar la cosa entre <>: <_CRT_SECURE_NO_WARNINGS> en un lugar. Para llegar al lugar, haga clic derecho en su proyecto en el explorador de soluciones y haga clic en las propiedades. Luego vaya a las propiedades de configuración, luego a c / c ++, luego al preprocesador. Luego, en las definiciones de preprocesador, después de todo, agregue un punto y coma y pegue la cosa. Luego presione Aplicar y Aceptar. Su problema debe ser resuelto.


Por cierto, la razón por la que su compilador le está dando un error, y deteniéndose, en lugar de la "advertencia" que realmente es el problema, es que debe tener su configuración de Visual Studio tal que "tratará todas las advertencias como errores". Cambie la configuración para permitir que las advertencias sean advertencias, y también puede ignorar esta advertencia.


scanf_s() no se describe en el estándar C99 (o en los anteriores).

Si desea usar un compilador que apunte a C99 (o anterior) use scanf() .

Para C11 Standard (y eventualmente las posteriores) scanf_s() es mucho más difícil de usar que scanf() para mejorar la seguridad contra los 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 del compilador.