El formato ‘% s’ espera un argumento de tipo ‘char *’

#include  int main(void) { int i,j,k; char st; printf("enter string\n"); scanf("%s", st); printf("the entered string is %s\n", st); } 

La comstackción del progtwig anterior me da una advertencia:

 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 pasa cuando lo ejecuto:

 $ ./a.out enter string kiaaa the entered string is (null) 

Editar:

Aquí hay otra versión del código (hecho char st; into char *st ):

 #include  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 igual en tiempo de ejecución.

char st es un solo personaje. A juzgar por el rest de su código, probablemente pretendía declarar una serie de caracteres:

 char st[80]; 

scanf necesita un puntero a char* para indicar que está escaneando una cadena.

Estás suministrando un personaje que está asignado en la stack.

Desea utilizar un getchar() o hacer una matriz char.

Tienes un tipo de desajuste.
scanf no es de tipo seguro, debe proporcionar el tipo adecuado. scanf permite obtener datos de la entrada y necesita decirle cuál es el tipo de datos que desea leer. Le pide que lea una cadena especificando %s al proporcionarle una variable de carácter.

Necesitas una matriz:

 #define MAX_LENGTH 256 char st[MAX_LENGTH]; 

Como @Jerry señala correctamente, puedes simplemente evitar todos los problemas usando:
getline () en lugar de usar scanf

st es el tipo de char & st es el tipo de char * Cuida la diferencia. Por cierto, solo una char no se puede utilizar para almacenar una cadena. Utilice la matriz char [].

Como otros han mencionado, deseas crear una matriz:

Cambio de char st; a char st[10]; o cualquier tamaño de matriz que desee.

Con el cambio anterior, st es una matriz que tiene 10 elementos individuales que pueden contener un solo valor char.

char st es un carácter, es decir, almacenará solo un carácter, inténtelo como este main() char st [100]; scanf("%s",st); main() char st [100]; scanf("%s",st); simplemente cambie estas tres líneas y funcionará, excepto que solo las cadenas de palabras aquí ha declarado la función como int que es int main () la mantendrá como main () y funcionará

utilizar char *st; o matriz como char st[50]

Cuando haya completado el uso del puntero char, debe desasignar la memoria utilizada por el puntero. Eso se puede hacer usando free(st); función.

EDITAR: Como está imprimiendo una cadena y si está usando un puntero, puede hacer lo siguiente:

 printf("the entered string is %s\n",st); printf("the entered string is %s\n",*st); // This will work in both cases if you use char *st or char st[50]