Tableaux et pointeurs

Résolu
Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   -  
Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un petit probleme de programmation avec des pointeurs... Je pensais maitriser la question, mais la il y a vraiment quelque chose que je ne comprend pas, et je pense que ca vient du compilateur. Habituellement je travaille sous visual C++ 6, mais la je fais un projet embarqué, su processeur ATMEL, et j'utilise eclipse et gcc pour compiler .... le systeme utilise freeRTOS et lwip(pile TCP/IP)

voila.. a un moment dans mon code, j'ai une structure HTTP
struct HTTP
{
char Version[4];
char Status[4];
char Session[30];
unsigned int Length;
};

j ai un pointeur HTTP* me; qui pointe sur une structure tout bien remplie ...

et j 'essaye d accéder a la 4eme case de Status...
pour cela, me semble t il, et la est la question, je connais 2 méthodes...; la méthode classique:
me->Status[3]='\0';
et la methode "frimeur", avec les pointeurs
me->Status+3+'\0';

pouvez vous me confirmer que ces 2 méthodes sont équivalentes?? et si non, pouvez vous me dire quelle set la différence?

pour moi, ces méthodes sont équivalentes, mais malheureusement, dans mon code, si je tape
me->Status[3]=\0'
if (me->Status+3=='\0')
printf("bingo");
else
printf("dans l'os");

et ben je l'ai toujours dans l'os.. pour etre poli ....

merci d 'avance pour vous pencher sur la question ... je précise que jusque la, je pensait être un plutôt bon programmeur... :'(
Configuration: Windows XP
Firefox 2.0.0.14

3 réponses

  1. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    et comme ça ?
    me->(*(Status+3))
    1
    1. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
       
      ca fait une erreur aussi. tu n'as rien le droit de mettre entre me-> et Status car ca ne forme qu'un seul bloc.
      me->Status est considéré comme une variable...
      0
  2. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    au fait, une erreur c'est glissée dans a description du probleme...
    pour la methode avec les pointeurs, il faut lire

    me->Status+3='\0';
    1
  3. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    le methode pointeur c'est plutot ça il me semble
    me->*(Status+3)
    0
    1. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
       
      merci de ta reponse...
      je vienxs de tester ca sous visual studio 6:

      #include <iostream.h>
      #include <string.h>

      struct http
      {
      char buf[10];
      };


      void main()
      {
      http* me=new http;
      strcpy (me->buf,"pointeurs");
      cout<<me->*(buf+3)<<endl;
      }

      je pense que ca correspondait a ce que tu disait, il me dit
      buf' : undeclared identifier
      '->*' : illegal, right operand has type 'int'

      par contre, si je fais
      cout<<(me->buf)+3<<endl;
      ou en core
      cout<<me->buf+3<<endl;

      il m'affiche bien "nteurs"
      0