read - working with strings in c



imprimir y escanear una cadena c (1)

Quería escanear e imprimir una cadena en C usando Visual Studio.

#include <stdio.h>

main() {
    char name[20];
    printf("Name: ");
    scanf_s("%s", name);
    printf("%s", name);
}

Después de hacer esto, no imprime el nombre. ¿Qué podría ser?


Citando de la documentación de scanf_s ,

Observaciones:

[...]

A diferencia de scanf y wscanf , scanf_s y wscanf_s requieren que se especifique el tamaño del búfer para todos los parámetros de entrada de tipo c , C , s , S o conjuntos de control de cuerda que están encerrados en [] . El tamaño del búfer en caracteres se pasa como un parámetro adicional inmediatamente después del puntero al búfer o variable.

Entonces, los scanf_s

scanf_s("%s", &name);

está mal porque no pasó un tercer argumento que denota el tamaño del búfer. Además, &name evalúa a un puntero de tipo char(*)[20] que es diferente de lo que %s en el scanf_s esperado ( char* ).

Arregle los problemas usando un tercer argumento que denota el tamaño del búfer usando sizeof o _countof y usando el name lugar de &name :

scanf_s("%s", name, sizeof(name));

o

scanf_s("%s", name, _countof(name));

name es el nombre de una matriz y el nombre de una matriz "decae" en un puntero a su primer elemento que es de tipo char* , justo lo que %s en la scanf_s espera.





printf