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 :

rajoute un char a une string


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 96
    Points : 32
    Points
    32
    Par défaut rajoute un char a une string
    Bonjour

    Voulant rajouter un caractere a une chaine de caractere j'ai essaye d'utiliser strcat mais cette fonction prend en paramètre 2 string or j'ai une string et un char. Comment faire ?

    J'ai essaye de transtyper le char en string mais sans succès.

    D'avance merci.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 409
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 409
    Points : 23 804
    Points
    23 804
    Par défaut
    Bonjour,

    Le type « string » n'existe pas en C. Il existe cependant en C++, qui est un langage distinct.

    En C, on passe des chaînes de caractères avec « char * », qui est un « pointeur vers un caractère ». L'idée est en fait d'indiquer en mémoire la position du premier caractère de la chaîne (donc le début de celle-ci). De là, on lit tous les suivants, jusqu'à ce qu'on tombe sur le caractère nul ('\0') marquant la fin de la chaîne.

    Si tu veux ajouter un caractère à la fin d'une chaîne, il te faudra dans tous les cas vérifier toi même si tu as la place pour le faire. Ensuite, soit tu le fais directement à la main, en déposant ton caractère à la position n (taille de la chaîne) et un nouveau caractère nul en n+1 :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        size_t n = 0;
        char c = 'A'; /* <- Ton caractère */
     
        n = strlen(chaine);
        chaine[n] = c;
        chaine[n+1] = '\0';

    ou bien tu déclares un tableau, justement pour pouvoir faire une chaîne de caractère, en ajoutant le caractère nul, et tu utilises les fonctions de traitement de chaîne habituelles :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        char c = 'A'; /* Ton caractère */
        char buffer[2];
     
        buffer[0] = c;
        buffer[1] = '\0';
     
        strcat (chaine,buffer);

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Points : 538
    Points
    538
    Par défaut
    ou sinon tu passe l'adresse du charactère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcat(chaine, &char);
    Ou si ton charactère est ajouté en dur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcat(chaine, "c");

  4. #4
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Bonjour.

    Citation Envoyé par 6-MarViN Voir le message
    ou sinon tu passe l'adresse du charactère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcat(chaine, &char);
    Non, ça ne fonctionnera pas.
    Les deux chaînes passées en paramètre à strcat() doivent être terminées par un caractère nul.
    En faisant comme tu le proposes, on n'a aucun moyen de savoir quand la fonction sera en mesure de lire un octet qu'elle pourra interpréter comme '\0'.

    Il faut également que la mémoire allouée pour la première chaîne soit suffisamment grande pour accueillir l'intégralité des deux chaînes.
    Vu que l'on n'a aucun moyen de prédire combien de caractères seront lus avant un '\0', ce n'est pas difficile d'imaginer qu'on a toutes les changes de déborder...

    La seule bonne manière de faire ce que tu proposes est de passer par un tableau de deux caractères, comme l'indique Obsidian.

Discussions similaires

  1. [PowerShell] Gestion de "spécial char" dans une string: Invoke-Expression
    Par messinese dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 16/05/2012, 14h52
  2. Convertir un char[] en une String
    Par Adorien dans le forum Langage
    Réponses: 3
    Dernier message: 08/04/2010, 13h05
  3. copier un char dans une string
    Par lezurp dans le forum C++
    Réponses: 6
    Dernier message: 26/03/2008, 17h43
  4. caster une string en char*
    Par luta dans le forum C++
    Réponses: 5
    Dernier message: 20/01/2006, 03h36
  5. Réponses: 6
    Dernier message: 24/07/2003, 13h39

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