Bonjour,
Voilà je me pose une question qui remet en cause les fondement même de l'allocation mémoire en C, ceci étant je ne suis pas un expert, et il est vraisemblable que quelque chose m'échappe.
Je débute en développement C avec l'utilisation de la Xlib. Un petit exercice en TP était de filtrer les événements clavier et de récupérer les keysym/keycode pour comprendre le fonctionnement. Après quelques test/recherche sur le net j'ai réussi à faire fonctionner un code qui me semble mysterieux mais somme toute très basique.
Voici mon code, je vous passe la structure habituelle d'un programme Xlib :
Ce programme que fait-il ?
Il traite l'événement clavier et affiche dans la console "Touche a" si la saisie faite a été le caractère "a"... "Touche Space" dans le cas de la saisie sur l'espace et "Touche Return" pour le retour chariot.
Mais quelque chose cloche (ou pas ?!?!?), en effet le professeur souhaitait juste un comportement simplifié qui afficherait le keysym en remplacant l'instruction du dernier else par :
Sachant que touche est de type KeySym mais correspond en realité a un entier lorsque l'on consulte X11/keysym.h.
Mon idée étant que si l'on remplace donc touche par &touche, alors le programme va aller chercher dans la mémoire à l'emplacement qui correspond à la valeur du KeySym, par ailleurs une correspondance du KeySym et de la table ASCII a probablement été faite... d'ou ce comportement.
Mais selon mon prof l'adressage d'une variable de type KeySym ne peut afficher un caractère, du moins selon ces connaissances puisque cela se produit bien !!
Quelqu'un serait il en mesure de m'expliquer le pourquoi du comment, ou tout simplement d'affirmer ma proposition, en le justifiant pour pouvoir m'eclaircir un peu et ainsi que je puisse argumenter mon explication par la suite.
Merci
Voilà je me pose une question qui remet en cause les fondement même de l'allocation mémoire en C, ceci étant je ne suis pas un expert, et il est vraisemblable que quelque chose m'échappe.
Je débute en développement C avec l'utilisation de la Xlib. Un petit exercice en TP était de filtrer les événements clavier et de récupérer les keysym/keycode pour comprendre le fonctionnement. Après quelques test/recherche sur le net j'ai réussi à faire fonctionner un code qui me semble mysterieux mais somme toute très basique.
Voici mon code, je vous passe la structure habituelle d'un programme Xlib :
Bloc de code:
KeySym touche;
for(;;){
XEvent ev;
char mot[25];
int nbre;
XNextEvent(dpy, &ev); //Attrape l'evenement
switch(ev.type) { //Condition sur l'evenement
case KeyPress : {
nbre = XLookupString(&ev, mot, sizeof(mot), &touche, 0); //Saisie du KeySym
if(touche==XK_Return) {
printf("Touche Return\n");
}
else if(touche==XK_space) printf("Touche Space\n");
else {
printf("Touche %s\n", &touche);
}
}
break;
}
Ce programme que fait-il ?
Il traite l'événement clavier et affiche dans la console "Touche a" si la saisie faite a été le caractère "a"... "Touche Space" dans le cas de la saisie sur l'espace et "Touche Return" pour le retour chariot.
Mais quelque chose cloche (ou pas ?!?!?), en effet le professeur souhaitait juste un comportement simplifié qui afficherait le keysym en remplacant l'instruction du dernier else par :
Bloc de code:
printf("Touche %d\n", touche);
Sachant que touche est de type KeySym mais correspond en realité a un entier lorsque l'on consulte X11/keysym.h.
Mon idée étant que si l'on remplace donc touche par &touche, alors le programme va aller chercher dans la mémoire à l'emplacement qui correspond à la valeur du KeySym, par ailleurs une correspondance du KeySym et de la table ASCII a probablement été faite... d'ou ce comportement.
Mais selon mon prof l'adressage d'une variable de type KeySym ne peut afficher un caractère, du moins selon ces connaissances puisque cela se produit bien !!
Quelqu'un serait il en mesure de m'expliquer le pourquoi du comment, ou tout simplement d'affirmer ma proposition, en le justifiant pour pouvoir m'eclaircir un peu et ainsi que je puisse argumenter mon explication par la suite.
Merci