l00kitsjake
Estoy tratando de ejecutar un programa C simple pero recibo este error:[20]advertencia: el formato ‘%s’ espera el tipo ‘char *’, pero el argumento 2 tiene el tipo ‘char
#include <stdio.h>
int main() {
char me[20];
printf("What is your name?");
scanf("%s", &me);
printf("Darn glad to meet you, %s!\n", me);
return (0);
}
scanf("%s",&me);
avatar de usuario
scanf("%s",me);
MOHAMED
"%s"
debiera ser scanf
Explicación: me
significa que me
está esperando un puntero al primer elemento de una matriz de caracteres. &
es una matriz de objetos y podría evaluarse como puntero. Entonces es por eso que puedes usar &
directamente sin agregar me
. agregando ‘char (*)[20]’
para char *
será evaluado a
y tu scanf está esperando "%s"
crítico de código: "%19s"
Utilizando
scanf("%19s",me);
– autista sizeof
15 mayo 2013 a las 17:09 _Alignof
Excepto cuando es el operando del &
, T
o unario T
operadores, o es un literal de cadena que se utiliza para inicializar una matriz en una declaración, una expresión de tipo “matriz de elementos N de
” se convertirá (“decay”) en una expresión de tipo “puntero a me
“, y se evaluará como la dirección del primer elemento de la matriz. char
la matriz se declara como una matriz de 20 elementos de me
; normalmente, cuando el char
expresión
scanf("%s", me);
aparece en su código, se tratará como una expresión de tipo “puntero a me
“. Si hubieras escrito
entonces no hubieras recibido el error; la expresion &
se habría convertido en una expresión del tipo correcto. char
Al usar el operador, sin embargo, ha pasado por alto esa regla; en lugar de un puntero a estás pasando un puntero a un char
formaciónchar (*)[20]
de scanf
( %s
), que no es lo que