Partage
  • Partager sur Facebook
  • Partager sur Twitter

Equivalent de strcpy pour l'envoi d'un tableau ?

    28 novembre 2019 à 16:44:01

    Bonjour ;

    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 :euh:

    Des pistes svp ?

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2019 à 18:11:48

      Bonjour,

      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

      -
      Edité par Warren79 28 novembre 2019 à 18:13:33

      • Partager sur Facebook
      • Partager sur Twitter

      Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

        29 novembre 2019 à 9:24:07

        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

        • Partager sur Facebook
        • Partager sur Twitter

        git is great because Linus did it, mercurial is better because he didn't.

          29 novembre 2019 à 14:28:01

          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.

          • Partager sur Facebook
          • Partager sur Twitter
            29 novembre 2019 à 16:08:01

            merci à vous tous, du coup ce que j'ai fait est ça :

            for (int i = 0; i < 5; i++)
                        {	
            		strcpy(buf, matComStr[i].c_str());
            		send(newSocket, buf, 32, 0);
            		std::cout << "Sending " << matComStr[i] <<std::endl ;
            	    } 
            

             y a pas un moyen pour envoyer le tableau d'un coup ? :euh:

            -
            Edité par Seira72 29 novembre 2019 à 16:08:48

            • Partager sur Facebook
            • Partager sur Twitter
              29 novembre 2019 à 16:39:02

              >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.

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                29 novembre 2019 à 16:42:54

                très bien merci beaucoup !
                • Partager sur Facebook
                • Partager sur Twitter

                Equivalent de strcpy pour l'envoi d'un tableau ?

                × 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.
                • Editeur
                • Markdown