J'ai deux progs : serveur et client et je cherche à envoyer un tableau (vector) string à partir du serveur vers le client. Mais j'arrive pas à le faire
ça marchait avant que je devais envoyer juste une variable char, je faisais ainsi
strcpy(buf, var);
send(newSocket, buf, 32, 0);
Mais maintenant que je dois envoyer un vector string je ne sais pas comment dois-je faire
Pour interfacer les 'std::string' avec une interface C , il y a la fonction membre 'c_str()' de l'objet std::string qui renvoie un pointeur sur le tableau de char interne du type std::string.
Plus d'infos à cette page: https://fr.cppreference.com/w/cpp/string/basic_string
Je ne sais pas ce qu'est un “vector string” mais effectivement std::string contient des fonctions .data() ou .c_str() qui permettent d'obtenir directement le tableau sous jacent. On peut aussi utiliser &foo[0] pour les adorateurs de la « syntaxe C ».
Note : je déconseille .c_str() car ça contient un '\0' qui n'est pas nécessaire dans l'envoi réseau. Si tu pouvais montrer la totalité du code d'envoi et de lecture on pourrait d'ailleurs voir si - par hasard - tu fais des erreurs de débutant en réseau.
- Edité par markand 29 novembre 2019 à 9:25:27
git is great because Linus did it, mercurial is better because he didn't.
Petit précision sur .data() et .c_str(), depuis C++11 elles font exactement la même chose: le '\0' terminal est imposé par la norme, str[str.size()] == '\0' aussi.
>y a pas un moyen pour envoyer le tableau d'un coup
Bon, on va remettre les choses en perceptive, si vous voulez envoyer des "machins" via le réseau, utilisez une "vraie" librairie C++ réseau comme "boost.asio" et prenez la peine de sérialiser vos objets et de mettre en place un protocole applicatif.
Avec tout ça, on s'en cogne sévère du tableau de madame Michu.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
git is great because Linus did it, mercurial is better because he didn't.