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 :

Concatener deux chaines avec des conditions


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Aruba

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 23
    Par défaut Concatener deux chaines avec des conditions
    Bonsoir,
    Je ne comprends pas comment faire une fonction qui renvoie un char * avec comme paramètre ( char * source,char* destination) et qui ajoute le 0 à la fin , sans utiliser de strcat.

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    C'est justement ce que l'on te demande, j'imagine : réécrire strcat.

    Qu'est-ce qui te bloque (sois précis) ?

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    1) tu places un premier pointeur à la fin de "destination"
    2) tu places un second pointeur au début de "source"
    3) tu recopies le caractère du second à l'endroit du premier
    4) tu incrémentes les deux pointeurs et retournes en 3 et ce, jusqu'à trouver le '\0' qui termine "source".

    Sinon tu peux, dans un premier temps, écrire un clone de strlen pour avoir une première approche de la manipulation des chaines...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 769
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    1) tu places un premier pointeur à la fin de "destination"
    2) tu places un second pointeur au début de "source"
    3) tu recopies le caractère du second à l'endroit du premier
    4) tu incrémentes les deux pointeurs et retournes en 3 et ce, jusqu'à trouver le '\0' qui termine "source"
    Tu as oublié l'étape 0 ... sinon badaboum ou

    0) realloc du premier pointeur avec comme nouvelle taille, la taille du premier pointeur + la taille du second pointeur + 1

  5. #5
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    Hello,

    Citation Envoyé par foetus Voir le message
    Tu as oublié l'étape 0 ... sinon badaboum ou

    0) realloc du premier pointeur avec comme nouvelle taille, la taille du premier pointeur + la taille du second pointeur + 1
    Ah ben non. La fonction strcat() de la bibliothèque standard considère que str1 est suffisamment grand que pour contenir str1+str2+\0

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    C'est là la différence entre "réécrire strcat()" et "faire mieux que strcat()".
    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.

  7. #7
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est là la différence entre "réécrire strcat()" et "faire mieux que strcat()".
    Mais dans ce cas, comment gérer le fait que strcat() puisse ne pas faire son boulot car realloc() renvoie NULL ? Renvoyer NULL également ? Pas vraiment pratique.

  8. #8
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    C'est là la différence entre "réécrire strcat()" et "faire mieux que strcat()".
    Le choix de ne pas ajouter aux responsabilités de la fonction la gestion de la mémoire n'est pas une décision qui s'apprécie qualitativement, c'est une question de paradigme.

    Faire mieux que strcat consisterait plutôt à - par exemple - retourner une information non redondante, comme l'adresse du caractère de fin de chaîne ou le nombre d'octets copiés.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par foetus Voir le message
    0) realloc du premier pointeur avec comme nouvelle taille, la taille du premier pointeur + la taille du second pointeur + 1
    Ok, tu veux faire le malin... donc comme la taille d'un pointeur c'est "4" je ne vois pas trop en quoi faire un realloc de 9 me permettra de stocker "Hello World" dans la nouvelle chaine

    Surtout (plus sérieusement) tu ne peux faire de realloc que sur un pointeur préalablement alloué par malloc alors qu'on peut très bien invoquer strcat sur un tableau de char...

    En fait je suis d'accord avec edgarjacobs et Matt_Houston qui avait mentionné "réécrire strcat" et je me suis cantonné à ça, juste ça. Accessoirement vu l'implication forte du PO dans cette discussion, je pense que j'ai bien fait
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/06/2012, 20h40
  2. Réponses: 1
    Dernier message: 30/06/2006, 16h01
  3. [ASE][T-SQL] Appel d'une sous-proc avec des conditions
    Par metheorn dans le forum Sybase
    Réponses: 1
    Dernier message: 19/05/2006, 18h38
  4. [VB.NET] Compléter une chaine avec des espaces
    Par Lois dans le forum Windows Forms
    Réponses: 4
    Dernier message: 24/03/2005, 09h09
  5. Script test de deux chaine avec if
    Par kacedda dans le forum Linux
    Réponses: 6
    Dernier message: 02/05/2003, 15h38

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