Le paramètre const char * indique que la fonction prend un pointeur sur octets. Sorcière semble vraiment être le résultat du fait que les concepteurs originaux d'api de socket soient pédantes - C a un type générique pour manipuler n'importe quel type de pointeur sans moulages explicites: void *.
Vous pourriez faire un emballage pratique pour envoyer comme celui-ci - qui vous permettra d'envoyer quelque chose (contiguë), vous pouvez faire un pointeur vers:
int MySend(SOCKET s, const void* buf, int len,int flags)
{
return send(s,(const char*)buf,len,flags);
}
Utiliser void * à la place de char * fait réellement l'api plus sûr, car il peut maintenant détecter quand vous faites quelque chose de stupide:
int x=0x1234;
send(s,(const char*)x,sizeof(x),0); // looks right, but is wrong.
mysend(s,x,sizeof(x),0); // this version correctly fails
mysend(s,&x,sizeof(x),0); // correct - pass a pointer to the buffer to send.
WSASend est un peu plus difficile à faire une Wapper de commodité pour que vous devez transmettre un tableau de struct contenant le char * » s - mais encore une fois c'est un cas de définir une structure équivalente avec const void * est à la place des const char *, puis lance les structures de données vers les types WSA dans le wrapper de commodité. Faites-le bien une fois, et le reste du programme devient beaucoup plus facile à déterminer correctement car vous n'avez pas besoin de jeter partout des bugs potentiels.
Vous avez deux réponses précises et utiles à cette question, veuillez en accepter une. –