J'ai le code suivant:
char *s1, *s2;
char str[10];
printf("Type a string: ");
scanf("%s", str);
s1 = &str[0];
s2 = &str[2];
printf("%s\n", s1);
printf("%s\n", s2);
Lorsque j'exécute le code et saisis l'entrée "A 1" comme suit:
Type a string: A 1
J'ai obtenu le résultat suivant:
A
�<�
J'essaie de lire le premier caractère sous forme de chaîne et le troisième caractère sous forme d'entier, puis de les imprimer à l'écran. Le premier caractère fonctionne toujours, mais l'écran affichera simplement des éléments aléatoires après cela ... Comment dois-je le corriger?
Vous êtes sur la bonne voie. Voici une version corrigée:
char str[10];
int n;
printf("type a string: ");
scanf("%s %d", str, &n);
printf("%s\n", str);
printf("%d\n", n);
Parlons des changements:
n
) pour stocker votre numéro dansscanf
de lire d'abord une chaîne puis un nombre (%d
signifie nombre, comme vous le saviez déjà grâce à votre printf
C'est à peu près tout ce qu'il y a à faire. Votre code est encore un peu dangereux, car toute entrée utilisateur de plus de 9 caractères débordera str
et commencera à piétiner votre pile.
scanf("%s",str)
scanne uniquement jusqu'à ce qu'il trouve un caractère d'espacement. Avec l'entrée "A 1"
, il n'analysera que le premier caractère, donc s2
pointe sur les ordures qui se trouvaient dans str
, car ce tableau n'a pas été initialisé.
Essayez ce code mon ami ...
#include<stdio.h>
int main(){
char *s1, *s2;
char str[10];
printf("type a string: ");
scanf("%s", str);
s1 = &str[0];
s2 = &str[2];
printf("%c\n", *s1); //use %c instead of %s and *s1 which is the content of position 1
printf("%c\n", *s2); //use %c instead of %s and *s3 which is the content of position 1
return 0;
}