[TD5] en C

Page 2 sur 2 Précédent  1, 2

Voir le sujet précédent Voir le sujet suivant Aller en bas

Re: [TD5] en C

Message  newu le Lun 02 Nov 2009, 12:49

Code:

   char * mot ;
   unsigned short * s ;
   unsigned char * c, * longueur ;

   s  = (unsigned short *) getTexte04() ;
   printf ("offset = %u \n", * s);

   c = (unsigned char *) (s + sizeof( s )) ;
   printf( "position = %i \n", * c ) ;

   longueur = c++ ;
   printf( "longueur = %i \n", * longueur ) ;

   mot = (char *) (longueur++ );
   imprimerMot( mot, *longueur ) ;

je pense que c ça la logique, mais ça me donne des résultats assez spéciaux :


ex15() :
offset = 352
position = 233
longueur = 233
éuni théorie mnopqrstuvw erGHIJabcefghijklmnopqrstuvw


ex15() :
offset = 352
position = 233
longueur = 233
éuni théorie mnopqrstuvw erGHIJabcefghijklmnopqrstuvw

newu

Nombre de messages : 117
Prénom : Abdou
Statut : 3ème gestion
Localisation : Je dors à l'école.
Date d'inscription : 25/09/2009

Revenir en haut Aller en bas

Re: [TD5] en C

Message  smb le Lun 02 Nov 2009, 13:01

Tu dois revoir ton arithmétique des pointeurs !
Combien crois-tu obtenir en faisant ( s + sizeof ( s ) ) ?

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [TD5] en C

Message  newu le Lun 02 Nov 2009, 13:24

Code:

   char * mot ;
   unsigned short * s ;
   unsigned char * c, * longueur ;
   void * ptr ;

   ptr  = getTexte04() ;
   s = (unsigned short *) ptr ;

   printf ("offset = %u \n", * s);

   c = (unsigned char *) (s + sizeof( *s )) ;
   printf( "position = %i \n", i) ;

   longueur = c+1 ;
   printf( "longueur = %i \n", i ) ;

   mot = (char *) (longueur+1 );
   imprimerMot( mot, *longueur ) ;

   free(s);

Oui j'ai compris la faute, mais ça ne marche pas, j'obtiens toujours pour la taille, offset et la longuer des nombres anormaux.

newu

Nombre de messages : 117
Prénom : Abdou
Statut : 3ème gestion
Localisation : Je dors à l'école.
Date d'inscription : 25/09/2009

Revenir en haut Aller en bas

Re: [TD5] en C

Message  smb le Lun 02 Nov 2009, 13:34

Non ! Tu n'as pas compris ta faute !
Tu dois revoir ton arithmétique des pointeurs (bis).
Si l'adresse contenue dans le pointeur s est par exemple 1024 (base 10), quelle sera le contenu de s après avoir fait ( s + sizeof (*s) ) ?
Tu peux facilement vérifier toi-même avec le debugger ou en affichant le contenu du pointeur avec comme spécificateur de format du printf %p .

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [TD5] en C

Message  newu le Lun 02 Nov 2009, 14:15

J'ai lu l'arithmetique des pointeurs pour l'occasion :

Code:

        unsigned short * s ;
   void * ptr ;
   ptr  = getTexte04() ;
   s = (unsigned short *) ptr ;
   printf ("offset = %u \n", *s);

je cherche juste à afficher l'offset, je crois que c'est juste ce que j'ai là.
Mais alors est-ce normal d'avoir pour la valeur de l'offset des valeurs comme 1600 ou 1700???
Parce que j'obtiens toujours des valeurs comme ça.

newu

Nombre de messages : 117
Prénom : Abdou
Statut : 3ème gestion
Localisation : Je dors à l'école.
Date d'inscription : 25/09/2009

Revenir en haut Aller en bas

Re: [TD5] en C

Message  smb le Lun 02 Nov 2009, 14:46

Tu dois normalement afficher 27 offset.
Voici un exemple d'affichage, mais ça change d'une exécution à l'autre.

  • 608
    1984
    256
    1856
    832
    1472
    1696
    1632
    928
    448
    288
    672
    960
    1216
    1920
    1088
    1344
    1888
    1152
    736
    1792
    96
    32
    160
    512
    992
    0


J'oubliais de signaler que tous les offset sont divisibles par 32.

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [TD5] en C

Message  newu le Lun 02 Nov 2009, 15:02

Et en quoi ça doit nous aider de le savoir???

newu

Nombre de messages : 117
Prénom : Abdou
Statut : 3ème gestion
Localisation : Je dors à l'école.
Date d'inscription : 25/09/2009

Revenir en haut Aller en bas

Re: [TD5] en C

Message  newu le Lun 02 Nov 2009, 15:06

smb a écrit:
Voici un exemple de zone. L'image est en hexadécimal donc 2 chiffres pour un octet !
Je n'ai pas inversé les octets de l'unsigned short.

00180305424F495241FFFFFF0000020420425520FFFFFFFF000C01055155492041FF

En rouge l'unsigned short contenant l'offset de la séquence suivante à traiter, en vert les lettres du morceau, entre les deux la position et la longueur. Les FF sont des "crasses".

Avec une table ascii et un peu de réflexion, tu devrais reconstituer :
QUI A BU BOIRA

disons que le short(=offset) est sur 2 octets, les char( = position et =longueur) sont chacun sur 1 octet.
il suffit de les récupérer mais pourquoi ça ne marche pas, je suis persuadé que mon code est correct.

newu

Nombre de messages : 117
Prénom : Abdou
Statut : 3ème gestion
Localisation : Je dors à l'école.
Date d'inscription : 25/09/2009

Revenir en haut Aller en bas

Re: [TD5] en C

Message  nvs le Lun 02 Nov 2009, 15:07

newu a écrit:J'ai lu l'arithmetique des pointeurs pour l'occasion :
il était temps !

source : c in a nutshell, p 61-62 et p 127-129.

newu a écrit:
Code:
unsigned short * s ;
void * ptr ;
ptr  = getTexte04() ;
s = (unsigned short *) ptr ;
printf ("offset = %u \n", *s);
et quel est le rapport entre ce bout de code et l'arithmétique des pointeurs ?

newu a écrit:je cherche juste à afficher l'offset, je crois que c'est juste ce que j'ai là.
Mais alors est-ce normal d'avoir pour la valeur de l'offset des valeurs comme 1600 ou 1700???
Parce que j'obtiens toujours des valeurs comme ça.
moi, j'ai :
640:832:1120:1792:192:1920:1056:800:224:1088:448:1728:256:1632:960:
576:1536:64:704:768:896:864:1248:736:1408:992:0

1632:1120:704:224:352:32:960:1280:1792:96:512:1696:480:864:832:1600:672:
448:320:1440:640:608:1888:1152:1760:160:0

704:768:1216:864:1408:1536:64:1472:2016:608:1152:128:1696:1280:224:1248:
1984:992:1120:800:1632:960:1024:32:640:1888:0

2016:992:1792:608:96:1024:1472:1312:1280:1248:256:704:864:1664:1760:832:
32:160:1152:1440:1952:512:896:544:672:1536:0

1728:1568:480:320:1088:928:1952:1920:704:256:1472:1536:896:96:1184:576:
192:1440:1760:768:1152:832:864:800:288:1312:0

96:1408:512:1248:768:1120:256:352:576:1376:864:1312:1152:1472:1024:960:
1728:1056:1184:1888:1696:160:672:896:480:544:0







_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [TD5] en C

Message  nvs le Lun 02 Nov 2009, 15:11

newu a écrit:[...] pourquoi ça ne marche pas, je suis persuadé que mon code est correct.
il faut parfois savoir remettre en cause ses convictions... et écouter les avis sages qui invitent à se remémorer l'arithmétique des pointeurs Wink








_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [TD5] en C

Message  Wark le Lun 02 Nov 2009, 15:14

newu a écrit:disons que le short(=offset) est sur 2 octets, les char( = position et =longueur) sont chacun sur 1 octet.
il suffit de les récupérer mais pourquoi ça ne marche pas, je suis persuadé que mon code est correct.

Allons demander à Monsieur JCJ ce qu'il en pense, je crois qu'il te ferait réinstaller son labo pour la peine.

Prends la peine de dessiner la zone mémoire, mets des couleurs et des valeurs. Avance dans ton pointeur général en décomposant encore un peu plus tes étapes..

'fin, ce sont juste des conseils, ils valent ce qu'ils valent .. Smile

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [TD5] en C

Message  newu le Lun 02 Nov 2009, 15:28

Wark a écrit:
newu a écrit:disons que le short(=offset) est sur 2 octets, les char( = position et =longueur) sont chacun sur 1 octet.
il suffit de les récupérer mais pourquoi ça ne marche pas, je suis persuadé que mon code est correct.

Allons demander à Monsieur JCJ ce qu'il en pense, je crois qu'il te ferait réinstaller son labo pour la peine.

Prends la peine de dessiner la zone mémoire, mets des couleurs et des valeurs. Avance dans ton pointeur général en décomposant encore un peu plus tes étapes..

'fin, ce sont juste des conseils, ils valent ce qu'ils valent .. Smile

Je plains le destin de ta 3ème, car un élève qui ne sais pas ça est une grosse erreur en 3ème année de l'ESI, un erreur de la nature.

Ca m'étonne pas, les anomalies sont fréquentes dans la nature, comme un agneau à 5 pattes.

newu

Nombre de messages : 117
Prénom : Abdou
Statut : 3ème gestion
Localisation : Je dors à l'école.
Date d'inscription : 25/09/2009

Revenir en haut Aller en bas

Re: [TD5] en C

Message  Wark le Lun 02 Nov 2009, 15:35

newu a écrit:Je plains le destin de ta 3ème, car un élève qui ne sais pas ça est une grosse erreur en 3ème année de l'ESI, un erreur de la nature.

Ca m'étonne pas, les anomalies sont fréquentes dans la nature, comme un agneau à 5 pattes.

T'en fais pas, je viendrai te dire bonjour à ta seconde deuxième. J'arrête de t'aider, tu es vraiment insupportable. Je souhaite bon courage aux professeurs qui doivent en avoir besoin pour ne pas s'arracher les cheveux ou exploser de rire, au choix.

* Edit * Dans ma citation, je parlais bien sûr de ton code plus haut (que tu penses tellement juste) et non pas de l'affirmation x ou y bytes pour tel ou tel type.

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [TD5] en C

Message  newu le Lun 02 Nov 2009, 15:39

Mais alors dégage!

Et qu'est ce que tu appelle de l'aide?

"Prends un papier et écris"

C'est de l'aide mais tu doit être tordu dans ta tête, tu dois être une sorte de Marie Thérèse ratée.

Ne me dis ce que je dois faire alors alors je ne te dirais pas où toi tu dois aller.

newu

Nombre de messages : 117
Prénom : Abdou
Statut : 3ème gestion
Localisation : Je dors à l'école.
Date d'inscription : 25/09/2009

Revenir en haut Aller en bas

Re: [TD5] en C

Message  Wark le Lun 02 Nov 2009, 15:50

Ok, autant pour moi, on parlait pas de la même chose. Soit.

Toujours est-il que pour fouiller la mémoire, refaire le dessin de la mémoire sur une feuille et décomposer ce que l'on doit faire en étape pour comprendre où ça peut merder, c'est utile.

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [TD5] en C

Message  nvs le Lun 02 Nov 2009, 15:50

une fois de plus, je me vois contraint de fermer un sujet suite au comportement inacceptable de newu.








_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

TD5 C

Message  newu le Lun 02 Nov 2009, 15:57

C'est chouette que vous le vérouillez, puisque je voulait dire merci pour son conseil et aussi lui dire à ce wark que Ms Monbaliu a déjà fait le petit schéma de la mémoire avec des couleurs, et qu'il(=Wark) peut aller voir comme je l'ai vu moi même.

newu

Nombre de messages : 117
Prénom : Abdou
Statut : 3ème gestion
Localisation : Je dors à l'école.
Date d'inscription : 25/09/2009

Revenir en haut Aller en bas

Re: [TD5] en C

Message  Anthoblack le Lun 02 Nov 2009, 16:04

Et c'est quoi la question ?

S'il n'y en a pas, peux tu supprimer ce sujet inutile s'il te plaît ? Smile

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [TD5] en C

Message  Contenu sponsorisé Aujourd'hui à 07:12


Contenu sponsorisé


Revenir en haut Aller en bas

Page 2 sur 2 Précédent  1, 2

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum