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 :

manipulation chaine de caractere


Sujet :

C

  1. #1
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut manipulation chaine de caractere
    bonjour,

    débutant dans le langage c,

    pour bien comprendre le fonctionnement les fonctions qui manipules des chaînes de caractère,

    j'ai écrit le code suivant qui devrait être l'équivalent de le fonction :

    " char* strcpy(char* copieDeLaChaine, const char* chaineACopier) "
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char* transfer(char* copieDeLaChaine, const char* chaineACopier);
     
    int main(int argc, char *argv[])
    {
        /*
        *   INITIALISATION CHAINES DE CARACTERES
        */
     
        char chaine[] = "Texte a copier", copie[100] = {0};
        char *copier = NULL;
     
        /*
        *   RECUPERATION DE LA COPIE DE LA CHAINE A VERS LA CHAINE B
        */
     
        *copier = *transfer(copie, chaine);
     
        /*
        *   AFFICHAGE DES CHAINES
        */
     
        printf("chaine vaut : %s\n", chaine);
        printf("copie vaut : %s\n", copie);
     
     
        return 0;
    }
     
    /*
    * FONTION EQUIVALENTE
    *
    *        DE :
    *
    *char* strcpy(char* copieDeLaChaine, const char* chaineACopier);
    */
     
    char* transfer(char* copieDeLaChaine, const char* chaineACopier)
    {
        char chaine[] = "Texte a copier", copie[100] = {0};
        int nombreCaractere = 0;
        char caractereActuel = 0;
     
     
            do
            {
                caractereActuel = chaine[nombreCaractere];
                copie[nombreCaractere] = chaine[nombreCaractere];
                nombreCaractere++;
            }
            while(caractereActuel != '\0');
     
        return copie[nombreCaractere];
    }
    hélas ce code ne renvois pas de pointeur

    ou est mon erreur? pour un début c'est mal partie !

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    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 382
    Points : 41 593
    Points
    41 593
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        *copier = *transfer(copie, chaine);
    Deux étoiles en trop.
    Au passage, si la fonction réussit, copier==copie de toute façon.

  3. #3
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        *copier = *transfer(copie, chaine);
    Deux étoiles en trop.
    Au passage, si la fonction réussit, copier==copie de toute façon.
    merci pour la réponse en enlevant les étoiles la chaîne copie reste toujours désespérément vide

    ce que je ne comprend pas c'est comment comment peut ton appeller une fonction du type :

    char* transfer(char* co...., char* ch.....) en enlevant les étoiles : transfer(co...., ch.....);

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    2 problèmes de fond :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char* transfer(char* copieDeLaChaine, const char* chaineACopier)
    {
        char chaine[] = "Texte a copier", copie[100] = {0};
    ...
       return copie[nombreCaractere];
    }
    • Ton tableau copie est une variable locale.. Son adresse n'est plus valide une fois sortie de la fonction....

    • Tu passes en paraèttre "chaine_a_copier", et après tu définis une chaine locale..

    • Tu définis un paramètre copie_de_la_chaine, et après tu retournes la copie...

  5. #5
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    2 problèmes de fond :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char* transfer(char* copieDeLaChaine, const char* chaineACopier)
    {
        char chaine[] = "Texte a copier", copie[100] = {0};
    ...
       return copie[nombreCaractere];
    }
    • Ton tableau copie est une variable locale.. Son adresse n'est plus valide une fois sortie de la fonction....

    • Tu passes en paraèttre "chaine_a_copier", et après tu définis une chaine locale..

    • Tu définis un paramètre copie_de_la_chaine, et après tu retournes la copie...
    merci pour ces remarques trés pertinentes je vais étudier ca plus en détails

  6. #6
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char* transfer(char* copieDeLaChaine, const char* chaineACopier);
     
    int main(int argc, char *argv[])
    {
        /*
        *   INITIALISATION CHAINES DE CARACTERES
        */
     
        char chaine[] = "Texte a copier", copie[100] = {0};
     
     
        /*
        *   RECUPERATION DE LA COPIE DE LA CHAINE A VERS LA CHAINE B
        */
     
            transfer(copie, chaine);
     
        /*
        *   AFFICHAGE DES CHAINES
        */
     
        printf("chaine vaut : %s\n", chaine);
        printf("copie vaut : %s\n", copie);
     
     
        return 0;
    }
     
    /*
    * FONTION EQUIVALENTE
    *
    *        DE :
    *
    *char* strcpy(char* copieDeLaChaine, const char* chaineACopier);
    */
     
    char* transfer(char* copieDeLaChaine, const char* chaineACopier)
    {
        int nombreCaractere = 0;
        char caractereActuel = 0;
     
     
            do
            {
                caractereActuel = chaine[nombreCaractere];
                copie[nombreCaractere] = caractereActuel;
                nombreCaractere++;
            }
            while(caractereActuel != '\0');
     
        return copie[nombreCaractere];
    }
    ce code initialise les tableau chaine et copier
    puis on envois les valeur du tableau chaine à chaineACopier,
    et les valeurs du tableau copie à copieDeLaChaine
    ensuite on met chaque caractère du tableau chaine un par un dans la variable caractereActuel (jusqu'a la fin du tableau)
    le tableau copie copie prend un à un les caractères du tableau chaine
    et pour finir la fonction renvois le contenu du tableau copie dans la variable transfer
    pour afficher les valeurs du tableau chaine et celles du tableau copier
    voila les erreur que je retrouve pendant le test

    In function ‘transfer’:

    49: erreur: ‘chaine’ undeclared (first use in this function)

    50: erreur: ‘copie’ undeclared (first use in this function)

    56: attention : control reaches end of non-void function
    qu'est ce que je n'est pas fait correctement, qu'est ce que j'ai loupé ?

  7. #7
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Regarde tout simplement les noms que tu as mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char* transfer(char* copieDeLaChaine, const char* chaineACopier)
    [...]
                caractereActuel = chaine[nombreCaractere];
                copie[nombreCaractere] = caractereActuel;
                nombreCaractere++;
            }
            while(caractereActuel != '\0');
    
        return copie[nombreCaractere];
    }
    De plus la fonction doit renvoyer un char* et pas un char. Il faut donc que tu mettes : return copieDeLaChaine;

  8. #8
    Nouveau membre du Club Avatar de speedy_souris
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Pouet_forever Voir le message
    Regarde tout simplement les noms que tu as mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char* transfer(char* copieDeLaChaine, const char* chaineACopier)
    [...]
                caractereActuel = chaine[nombreCaractere];
                copie[nombreCaractere] = caractereActuel;
                nombreCaractere++;
            }
            while(caractereActuel != '\0');
    
        return copie[nombreCaractere];
    }
    De plus la fonction doit renvoyer un char* et pas un char. Il faut donc que tu mettes : return copieDeLaChaine;
    merci beaucoup, je pense que comme tous les débutants je fait des fautes d'inattention
    ca va me servir pour la suite
    merci à tous

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

Discussions similaires

  1. Manipulation chaine de caractere
    Par lionceau dans le forum Débuter
    Réponses: 3
    Dernier message: 19/12/2010, 21h47
  2. manipulation chaine de caractere
    Par Alex35 dans le forum ASP
    Réponses: 9
    Dernier message: 08/02/2007, 15h11
  3. Manipuler une chaine de caracteres
    Par virtu67 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 28/12/2006, 16h31
  4. Manipulation chaîne de caractères
    Par jmde dans le forum Access
    Réponses: 7
    Dernier message: 07/12/2006, 10h37
  5. debutant asp manipulation chaine de caractere
    Par MaxiMax dans le forum ASP
    Réponses: 3
    Dernier message: 12/08/2005, 16h59

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