Probleme avec les sockets en C

Fermé
g33kzone Messages postés 40 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 18 février 2009 - 18 févr. 2009 à 16:05
HackStyle Messages postés 30 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 12 avril 2009 - 6 avril 2009 à 07:00
Bonjour, je débute en C et je me suis récemment interressé aux socket (sous windows) , seulement il y a quelque chose que je ne comprends pas avec deux fonctions : send() et recv() dont voici le prototype :

int send(
__in SOCKET s,
__out char *buf,
__in int len,
__in int flags
);

int recv(
__in SOCKET s,
__out char *buf,
__in int len,
__in int flags
);

la fonction recv est sensé modifier le contenu de la variable buf à l'aide d'un pointeur seulement tous les appels de fonctions que j'ai vu jusqu'a présent dans les cours et exemples sur les sockets étaient faits de cette maniere :

recv(s,buf,sizeof(buf),0);

je ne comprends pas comment une fonction peux modifier le contenu d'une variable sans passer par un pointeur , pouvez vous m'éclaircir sur la question . Merci de votre aide

3 réponses

HackStyle Messages postés 30 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 12 avril 2009 9
5 avril 2009 à 17:03
Euh... Si tu connais bien tes leçons sur le C, tu devrais savoir que si une variable tableau n'est pas suivis des crochets pour spécifier l'élément voulu, cette variable donne l'adresse du premier élément (0).

Ces codes sont strictement égaux :

recv(s,&buf[0],sizeof(&buf[0]),0); // On donne l'adresse du premier élément

recv(s,buf,sizeof(buf),0); // Pareil

Ciao ;).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
5 avril 2009 à 19:42
A priori c'est toi qui connaît pas bien tes leçons de C ^^.

savoir que si une variable tableau n'est pas suivis des crochets pour spécifier l'élément voulu, cette variable donne l'adresse du premier élément (0).
Non. Il ne faut pas confondre avec le pointeur. Pour t'en convaincre :
Si tu as un tableau char buf[250];
sizeof buf, ça te renvoie 250
sizeof &buf[0], ça te renverra 4 (sur machine 32 bits).

Donc tes codes ne sont pas égaux du tout ;-)).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
5 avril 2009 à 19:46
Salut,
En fait en C, même si tu mets le tableau, le compilateur remplacera par l'adresse de celui-ci. Dis autrement, le passage de tableaux se fait par adresse et non par copie contrairement aux variables classiques.
Voilà pourquoi la fonction peut modifier le contenu de ton tableau ;-)).
0
HackStyle Messages postés 30 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 12 avril 2009 9
6 avril 2009 à 07:00
Voila ce qui arrive quand on utilise les notions avancés sans de solides bases mdr...

Ah ouais fiddy c'est exact ! le boulet que je suis, j'ai carement zappé ça moi !

J'ai verifier et c'est exacte, je suis sur que je vien de découvrire la source de 20% de mes problémes lol.

Aller ciao ! Merci pour la petite leçon que je zappé toujours concernant les tabs.

@++

EDIT: Désolé g33kzone pour ces fausses infos
0