Tableaux et pointeurs

Résolu
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. et comme ça ?
    me->(*(Status+3))
    1. Contributeur
      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...
  2. Contributeur
    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. le methode pointeur c'est plutot ça il me semble
      me->*(Status+3)
      1. Contributeur
        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"