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
Vous devez vous connecter pour publier un commentaire.
char st
est un caractère unique. À en juger par le reste de votre code, vous avez probablement prévu de déclarer un tableau de caractères:OriginalL'auteur
scanf
a besoin d'un pointeur verschar*
pour indiquer que vous numérisez une chaîne de caractères.Vous fournir un personnage qui est alloué sur la pile.
Vous souhaitez utiliser un
getchar()
ou fairest
un tableau de char.OriginalL'auteur
Vous avez un type de mis-match.
scanf
n'est pas de type sécurisé, Vous devez fournir le bon type.scanf
vous permet d'obtenir les données d'entrée et vous avez besoin de lui dire quel est le type de données que vous souhaitez lire. Vous lui demandez de lire une chaîne de caractères en spécifiant%s
par lui donner un caractère variable.Vous avez besoin d'un tableau:
@Jerry souligne à juste titre, Vous pouvez simplement éviter tous les tracas en utilisant:
getline() au lieu d'utiliser
scanf
scanf
- tout comme, à l'appel avec juste%s
au lieu de quelque chose comme%255s
est à peu près équivalent à l'appel degets
.Bien, l'a souligné. merci
Ce n'était vraiment pas prévu que recommander à quiconque d'utiliser
gets
(jamais)!Hmm..oui..glissé.
OriginalL'auteur
saint est le type de char
&st est de type char *
Prendre soin de la différence.
BTW, un seul char ne peut pas être utilisé pour stocker une chaîne de caractères. Utilisation char tableau [].
OriginalL'auteur
Comme d'autres l'ont mentionné que vous souhaitez créer un tableau:
Changement
char st;
àchar st[10];
ou quelle que soit la taille du tableau que vous voulez.Avec la modification ci-dessus
st
est un tableau qui a 10 éléments que peut contenir une et une seule valeur char.OriginalL'auteur
char st est un personnage que j'ai.e il va stocker qu'un seul caractère essayer comme ça
main()
char st [100];
scanf("%s",st);
il suffit de changer ces trois lignes et il travail, il s'sauf un seul mot chaînes
ici, vous avez déclaré la fonction comme un int qui est de type int main() conserver en tant que principal() et il fonctionnera
OriginalL'auteur
utilisation
char *st;
ou d'une matrice, commechar st[50]
Lorsque vous avez terminé l'utilisation de pointeur de char, vous devez libérer la mémoire utilisée par pointeur. Cela peut être fait en utilisant
free(st);
fonction.EDIT : Comme vous l'impression de chaîne et si vous utilisez le pointeur, vous pouvez faire comme:
char*
, veuillez vous recommandons également un moyen d'affecter/mémoire libre.Si je l'utilise comme char *st alors comment dois-je aller pour cette option pour imprimer?
char *st; printf("enter string\n"); scanf("%s",st); printf("the entered string is %s\n",*st);
aller de l'avant avec votre solution. ou vous pouvez également utiliser printf("la chaîne saisie est %s\n",r);
édité répondre
downvoter pourquoi downvote? quel est le problème?
OriginalL'auteur