Partage
  • Partager sur Facebook
  • Partager sur Twitter

[c++] Variables type string

allocation de memoire

    3 décembre 2005 à 13:58:59

    Salut,
    Pour savoir si on alloue de la memoire quand on declare une variable de type string. Comme pour char :
    char MaVariable[15];

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2005 à 14:55:42

      Non, l'intér^et des strings est de tout allouer pour toi.

      string s;
      cin >> s;
      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2005 à 15:05:01

        Les "string", c'est en C++ ;)

        En C, tu peux faire un tableau ou un pointeur (ils sont équivalents).

        Par exemple :

        char prenom[255];
        const char *message_accueil = "Hello all people ;) !";
        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2005 à 17:05:35

          Citation : Saimoun

          En C, tu peux faire un tableau ou un pointeur (ils sont équivalents).

          Par exemple :

          char prenom[255];
          const char *message_accueil = "Hello all people ;) !";


          Arg, ton const char, je sais pas si il marche. Tu déclares un pointeur sur char sans allouer aucune mémoire pour stocker ta phrase.

          const char message_accueil[] = "Hello all people ;) !"

          Ca ca marche
          • Partager sur Facebook
          • Partager sur Twitter
            3 décembre 2005 à 17:09:56

            et c'est quoi la différence entre *message_acceuil et message_acceuil[] ?
            • Partager sur Facebook
            • Partager sur Twitter
              3 décembre 2005 à 17:12:53

              Ben [] c'est un tableau de taille indéterminée, sauf au moment de la compilation où il définit ce qu'il faut. Un *, ca n'alloue rien du tout.
              • Partager sur Facebook
              • Partager sur Twitter
                3 décembre 2005 à 17:19:50

                C'est valide de faire
                const char *s = "foobar";
                En effet, "foobar" est déjà un tableau de caractères alloué automatiquement par le compilateur de manière statique/globale.
                • Partager sur Facebook
                • Partager sur Twitter
                  3 décembre 2005 à 19:23:33

                  Non, c'est vrai, j'aurai du faire un new[] ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 décembre 2005 à 16:51:21

                    Ok merci.

                    Citation : Saimoun

                    Les "string", c'est en C++ ;)


                    Ouep, cf titre du post ;p
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 décembre 2005 à 17:09:02

                      Tu declare comme ca:

                      string truc("hello");


                      Mais je te conseille les char, paske tu verra que dans beaucou de fonctions (en c++, en c je sais pas tro) tu ne pourra pas mettre de string (surtout avec les paramètres)...

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 décembre 2005 à 17:17:50

                        Citation : Uims

                        Mais je te conseille les char, paske tu verra que dans beaucou de fonctions (en c++, en c je sais pas tro) tu ne pourra pas mettre de string (surtout avec les paramètres)...


                        En C++ quand tu as une classe qui te facilite la vie pour les string vaut mieux l'utiliser, en plus ca correspond mieux à la philosophie objet, c'est plus sur et c'est plus rapide. Pour les fonctions je suppose que tu parle de celles qui manipulent les chaînes de caractère mais en fait quand tu utilise la classe string ces fonctions ont leur équivalent intégré dans la classe.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          4 décembre 2005 à 17:38:33

                          Citation : Garuma

                          et c'est plus rapide

                          Je ne vois pas comment un string, qui utilises des classes, pourrait être plus rapide que le char qui est directement un pointeur...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 décembre 2005 à 18:25:33

                            Citation : Developpez.com

                            Programmer en utilisant std::string est incontestablement plus rapide, plus lisible et plus sûr que de programmer en utilisant les antiques char*. Si votre but est d'écrire un programme qui marche et qui soit facile à maintenir, utiliser string est un bien meilleur choix. Il est en effet tentant de dire qu'utiliser les char* fait surtout planter le programme plus vite.
                            Il faut aussi relativiser la possible lenteur de string par le fait que l'écart est très souvent sans conséquence pour l'utilisateur. Même si lire et afficher une chaîne de caractères est deux fois plus lent avec les string qu'avec les char*, l'écart est dans ce cas dérisoire voire non mesurable. Néanmoins, il est des cas où une application manipule un très grand nombre de chaînes de caractères, et on peut alors, à juste titre, se poser la question. La réponse n'est pas évidente. Tout d'abord, le premier point en faveur des string est que celles-ci connaissent en permanence leur longueur (fonction size() ou length()), qui n'a donc pas besoin d'être calculée, contrairement aux char* ou il faut systématiquement effectuer un appel à strlen(). Ainsi, plus la longueur des chaînes manipulées est importante, et plus string se révèlera performante vis à vis des char*.


                            Désoler si c'est un peu gros.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 décembre 2005 à 19:37:14

                              string : plus rapide à programmer et plus sur.
                              char* : plus rapide à l'execution (DANS 99,99% DES CAS ON S'EN FOUT !!!) mais très complexe et lourd à gérer.

                              Conclusion : utilisez des string TOUT LE TEMPS !!!!

                              Si jamais une fonction demande du const char* en parametre, utilisez string::c_str() !
                              • Partager sur Facebook
                              • Partager sur Twitter

                              [c++] Variables type string

                              × 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