le format '%s' attend argument de type 'char *'

#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);
}

De la compilation de programme ci-dessus me donne un avertissement:

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]

Ce que je fais mal?

C'est ce qui arrive quand je le lance:

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

Edit:

Voici une autre version du code (en fait 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);
}

Cependant, il se comporte de la même manière sur l'exécution.

Maintenant, votre char *st; est un pointeur non initialisée. Vous ne savez pas où il points. Accéder à la scanf est un comportement indéterminé. Vous devez faire le point à une assez grande partie de la mémoire valide. Soit déclarer un tableau char st[100]; - le nom du tableau est converti en un pointeur lorsqu'il est passé comme argument à scanf ou printf, c'est très bien - ou le déclarer comme un pointeur, comme vous avez, et d'allouer de la mémoire, st = malloc(100 * sizeof *st); avant de l'utiliser. Vous avez besoin #include <stdlib.h> pour malloc, et de vérifier si malloc retourné NULL.

OriginalL'auteur Registered User | 2012-05-24