Tableaux et pointeurs

Résolu/Fermé
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 15 juin 2008 à 02:37
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 15 juin 2008 à 13:10
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... :'(

3 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
15 juin 2008 à 03:25
et comme ça ?
me->(*(Status+3))
1
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
15 juin 2008 à 13:08
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
15 juin 2008 à 13:10
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
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
15 juin 2008 à 03:06
le methode pointeur c'est plutot ça il me semble
me->*(Status+3)
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
15 juin 2008 à 03:16
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