#include <stdio.h>
int main(void)
{
int i,j,k;
char st;
printf("enter string\n");
scanf("%s", st);
printf("the entered string is %s\n", st);
}
compilación anterior programa me da una advertencia:formato '% s' espera argumento de tipo 'char *'
warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat]
palindrom.c:8:1: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int' [-Wformat]
¿qué estoy haciendo mal aquí?
Esto es lo que sucede cuando lo ejecuto:
$ ./a.out
enter string
kiaaa
the entered string is (null)
Editar:
Aquí es otra versión del código (hecho char st;
en char *st
):
#include <stdio.h>
int main(void)
{
int i,j,k;
char *st;
printf("enter string\n");
scanf("%s", st);
printf("the entered string is %s\n", st);
}
Sin embargo , se comporta de la misma manera en tiempo de ejecución.
Ahora su 'char * st;' es un puntero no inicializado. No sabes dónde apunta. Acceder a él en 'scanf' es un comportamiento indefinido. Debe hacer que apunte a un trozo suficientemente grande de memoria válida. O bien declara una matriz 'char st [100];' - el nombre de la matriz se convierte en un puntero cuando se pasa como un argumento a 'scanf' o' printf', así que está bien - o lo declara como un puntero, como lo has hecho, y asignar algo de memoria, 'st = malloc (100 * sizeof * st);' antes de usarlo. Necesitas '#include' para 'malloc', y verificar si' malloc' devolvió 'NULL'. –