Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème sémantique Char

contenir "} dans un char

    14 février 2020 à 11:02:25

    Bonjour j'ai un petit problème de "sémantique" je pense concernant l'initialisation d'un char*.

    j'aimerais que ce char contienne "} cependant je ne sais pas sémantiquement comment m'en prendre sachant que je vais pas écrire  c= ""}";

    Voici le code:

    char *end;
    int version;
    char *norm;
    norm = '"}'; // ceci est faux du coup
    
    end=str_sub(contenuMSG,16,17); //récupère "}
    
    version= strcmp(end,norm);
    


    Merci d'avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2020 à 11:45:21

      Il faut échapper le caractère "\"}"

      • Partager sur Facebook
      • Partager sur Twitter
        14 février 2020 à 12:00:57

        '' pour un unique caractère
        "" pour une chaine de caractère.

        Ensuite attention à ta manière de pointer vers un littéral, il doit être en lecture seul.

        char *ptr = "plop";//dangereux (peut être un warning associé)
        
        const char *ptr="plop";//ok, et juste en lecture seul
        
        char ptr[] = "plop";//ok et on peut modifier le tableau de caractère
        • Partager sur Facebook
        • Partager sur Twitter
          14 février 2020 à 12:05:06

          Salut,

          Effectivement... Alors un char* ne contient rien d'autre qu'une adresse, il ne contiendra pas "bonjour" ou "'}", il contiendra 54921, 489633 ou n'importe quelle autre valeur du genre. En l’occurrence, cette adresse mène à un endroit de la mémoire où "bonjour" a été stocké, l'adresse étant celle du premier caractère 'b'.

          Au passage, la syntaxe pour un caractère constant est 'b', celle d'une chaîne de caractère (constante) est "bonjour".

          Ta ligne 4 contient 2 caractères, elle devrait être "\"}", l'antislash permettant d'échapper le second " qui doit faire partie de la chaîne.

          Bonne continuation.
          • Partager sur Facebook
          • Partager sur Twitter

          Bonhomme !! | Jeu de plateforme : Prototype.

            17 février 2020 à 8:51:01

            Pour des raisons mystérieuses (pour le débutant) il n'est pas tout à fait interdit d'écrire

            char c = "abc";
            

            en s'attirant certes le message warning: initialization makes integer from pointer without a cast

            En effet, "abc" est  (se dégrade en) l'adresse d'une zone contenant les 3 caracteres etc. et dans les principes de base du C historique, il y avait l'idée d'on peut interchanger entiers et pointeurs, et comme un char est un petit entier, voila voila.

            Amusant aussi

             char c = 'abc';
            

            qui s'en tire aussi avec un avertissement  warning: multi-character character constant

            c'est légal (et déconseillé) aussi https://zipcon.net/~swhite/docs/computers/languages/c_multi-char_const.html

            En effet : 'abc' est un nombre calculé à partir des caractères (souvent, le nombre int32 qui correspond aux 4 octets, ce qui n'est évidemment pas portable)


            En voila un langage qu'il a été bien conçu :-)


            PS: à quoi ça sert ?  Disposer d'identifiants lisibles pour des switches par exemple

            switch (tag) {
            case 'foo' :...;
            case 'bar' : ..;
            ...

            Mauvaise idée: les énumérations font mieux le job, et si on fait une faute, le compilateur aura une chance de s'en rendre compte.



            -
            Edité par michelbillaud 17 février 2020 à 8:56:29

            • Partager sur Facebook
            • Partager sur Twitter

            Problème sémantique Char

            × 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