IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Afficher des caracteres


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Points : 0
    Points
    0
    Par défaut Afficher des caracteres
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     #include <unistd.h>
     
    void    ft_putchar(char c)
    {
        write(1, &c, 1);
    }
     
    void    ft_putstr(const char *str)
    {
        int index;
     
        index = 0;
        while(str[index])
        {
            ft_putchar(str[index]);
            index++;
        }
    }
     
    int     main(void)
    {
        const char str;
     
        str = ["Blanche"];
        ft_pustr(str);
        return(0);
    }
    Quel est mon problème ?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 378
    Points : 23 669
    Points
    23 669
    Par défaut
    Bonjour et bienvenue,

    Citation Envoyé par chimer51 Voir le message
    Quel est mon problème ?
    Ça, c'est à toi de nous le dire si tu veux qu'on t'aide, tu ne crois pas ?
    Mais à première vue :

    Il manque quelque chose à cette ligne.

    Ceci n'est absolument pas correct. Cette syntaxe n'est pas valide du tout en C et ne compilera pas.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    ]Merci =)

    J'ai fait un double post ou j'avais ecrit .
    "Erreur de syntaxe dans le main. Chat non-disponible"
    Je suis conscient d'ou ce situe mes erreures mais je ne sait pas comment la résoudre. Pourriez vous juste me donner la bonne syntaxe pour que mon programme compile?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    {
        const char *str;  ?
        const char str[]; ?
     
        str[0] = 'B';
        str[8] = '\0';
     
    }?
    { 
        const char str[8];
     
        str[8] = {'B',"l","a","n","c","h","e",'\0'};
    }?

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 293
    Points : 4 943
    Points
    4 943
    Billets dans le blog
    5
    Par défaut
    Tu pourras trouver toutes les réponses à tes questions dans la faq : http://c.developpez.com/faq/?page=Le...-de-caracteres.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        char const *str = "Blanche";
     
        str = "Blanche";
        ft_putstr(str);
        return(0);
    Merci!

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 378
    Points : 23 669
    Points
    23 669
    Par défaut
    Citation Envoyé par chimer51 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        char const *str = "Blanche";
     
        str = "Blanche";
        ft_putstr(str);
        return(0);
    Merci!
    Bravo pour avoir réussi à atteindre le résultat seul. Cependant, il y a encore un tout petit détail qu'il faut prendre en compte.

    En C, en réalité, il n'y a pas de type « chaîne de caractère » à part entière, car ce type nécessite toute une gestion sous-jacente, au runtime de surcroît. Par exemple, il faut allouer-réallouer de la mémoire au fur et à mesure que son contenu change, il faut maintenir sa taille quelque part, etc. Toutes ces choses-là ne peuvent être connues à la compilation et se gèrent d'une manière différente des autres types. À la place, tu utilises un « pointeur vers un char » que tu écris « char * » et qui va indiquer l'adresse en mémoire d'un caractère unique. Ce caractère est réputé, par convention, être le premier d'une chaîne, c'est-à-dire qu'une fois que l'on a trouvé le premier, il est facile de lire les suivants. Toujours par convention, on signalera la fin d'une chaîne par un caractère nul « \0 ».

    Quand tu écris « str = », tu fais donc pointer ton pointeur vers quelque chose d'existant en mémoire. Parallèlement, le fait d'écrire une chaîne de caractère entre guillemets dans un programme C va amener le compilateur à enregistrer cette chaîne telle quelle, « en dur », dans le fichier exécutable de ton programme, chargé ensuite en mémoire à lecture seule. Ça veut dire que dans ce cas précis, tu ne pourras pas directement modifier le contenu de ta chaîne ni y concaténer quoi que ce soit. Dans tous les cas, il faudra explicitement allouer de la mémoire pour le faire.

    Tu découvriras tout cela en explorant la FAQ.
    Bon courage.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Et aussi: Éviter les nombres magiques. Tu devrais utiliser la constante STDOUT_FILENO au lieu de 1 dans ton appel à write().

    Avec un minimum d'intelligence et un coup d'œil à la doc de write(), tu sais lequel des deux 1 remplacer.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 6
    Points : 0
    Points
    0
    Par défaut
    Donc si je resume une chaine de caractere ce fini par \0 elle est stocker dans un tableau(que je doit malloc//free pour eviter des problemes).
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    write(2," const char *", 13); 
    //2 = STDERR_FILENO, 1 = STDOUT_FILENO,  0 = STDIN_FILENO
    Je n'arrive cependant pas à trouver la lib unistd.h sur windows.

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est parce que comme son nom l'indique, ce fichier d'en-tête est pour les systèmes d'exploitation unixoïdes.

    Mais l'idée Épitesque d'utiliser write() au lieu de printf() pour tes entrées/sorties est généralement inséparable de celle d'utiliser un système unixoïde, donc la plupart du temps ça ne cause pas de problème.

    Sous Windows, tu dois avoir la fonction _write() (note l'underscore), déclarée dans <io.h>. Ou bien, tu prends Cygwin.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher des caractères chinois
    Par tandor dans le forum Général Java
    Réponses: 8
    Dernier message: 01/01/2009, 20h58
  2. Comment afficher des caractere asiatique (coréen) sur IRC ?
    Par neptune13 dans le forum IRC / mIRC
    Réponses: 1
    Dernier message: 06/11/2008, 19h34
  3. Réponses: 1
    Dernier message: 03/10/2008, 11h43
  4. [Jsp] afficher des caracteres arabes
    Par L_latifa dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 22/03/2006, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo