Je veux écrire un programme qui traduit un message saisi par l'utilisateur en b1ff-parler. Cependant, le programme semble s'écraser ici:
#define MAX_LEN 80
char message[MAX_LEN];
printf("Enter a message: ");
for (int i = 0; i < MAX_LEN - 1; i++)
scanf("%c", message[i]);
for (int i = 0; i < MAX_LEN - 1; i++)
printf("%c", message[i]);
3 Réponses :
Vous devez transmettre l'adresse à scanf:
Vous devez ajouter une ampersand dans l'instruction SCANF.
scanf("%c", &message[i]);
Le problème est que vous êtes censé passer un pointeur sur scanf em>.
Normalement, vous passez un tableau (qui est un pointeur) ou un pointeur de char (chaîne). Ce que vous faites, c'est en train de passer le caractère lui-même. La méthode n'a aucune possibilité d'écrire quelque chose dans le char, car il est copié avant l'appel de la fonction. Que se passe-t-il alors est que la méthode interprète le caractère ininitialisé comme une adresse et essaie d'écrire à un emplacement aléatoire qui échoue probablement . P> passe simplement l'adresse du caractère: p>
Qu'est-ce que
max_len code>?Vous manquez une ampersand ici:
scanf ("% c", message [i]); code>. Et ne pensez même pas à utiliserobtient code>. Utilisezfgets code> à la placeJe pensais que l'utilisation d'Ampersand avec des matrices de caractères est fausse, car le premier élément d'un tableau de charme agit comme un pointeur à l'ensemble de la matrice? Ou je commence quelque chose de mal?
@Pluster vous mélangeez des trucs. Le nom d'un tableau i> est converti en un pointeur à son premier élément. Fondamentalement, n'utilisez pas l'ampersand lors de la numérisation dans les chaînes telles que:
scanf ("% s", message); code>