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 :

utilisation des fonctions avec comme paramètre des variable de type CHAR


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut utilisation des fonctions avec comme paramètre des variable de type CHAR
    Bonjour,

    J'utilise plusieurs fonctions avec des chaines de caractères :

    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
    #include <stdio.h>
    #define TAILLE_IP 1000
     
    void parseur()
    {
        FILE* fichier = NULL;
        char ip[TAILLE_IP] = "";
     
        fichier = fopen("AKF_computer.txt", "r");
     
        if (fichier != NULL)
        {
            while (fgets(ip, TAILLE_IP, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
            {
            // On Suprime les caractères de saut de ligne  
            if (ip[strlen(ip) - 1] == '\n')
            {
                ip[strlen(ip) - 1] = '\0'; 
            }
                printf("%s : ",ip);
                reponse(ip);   
            }
            fclose(fichier);
        }
    }
    Ici je parse un fichier texte dans le but de récupérer les adresses IP qu'il contient. Ensuite, j'appelle une autre fonction qui reçoit en paramètre ma chaine de caractères (adresse IP) :

    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
    #include <stdio.h>
    void reponse(ip)
    {
        int reponse = test(ip);
     
        printf("%ld",reponse); 
     
        if(reponse==1)
        {
            printf("Installation possible\n");                  
        }
        else if(reponse==2)
        {
            printf("Partage c$ inaccessibles\n");              
        }
        else if(reponse==3)
        {
            printf("Pas de reponse au Ping\n");           
        }
    }
    La question que je me pose, c'est si je dois déclarer le type de variable que reçois en paramètre ma 2eme fonction ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void reponse(ip)
    {
    ...
    }
    Car pour une variable de type entier, dans les cours que j'ai pu lire, il faut le faire, mais dans mon cas, si je déclare le type (char) la compilation plante.

    Je pose cette question par après dans mon programme, j'ai besoin d'appeler une fonction qui à besoin de deux paramètres de deux types différents (char et int)

    merci d'avance de vos lumières.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ben oui, il faut déclarer, mais ce ne sera pas de type char.
    Ce sera sans doute de type pointeur sur char (char *) ou pointeur sur char constants (const char *).

    D'ailleurs, si tu regardes le prototype d'autres fonctions comme fopen(), tu verras qu'elles prennent en paramètre un const char *.

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    ok, dans mon cas, ca sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void reponse(char *ip)
    {
    ...
    }
    ?

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    effectivement, cela fonctionne

    appel de la fonction avec en paramètre mon adresse ip
    la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void reponse(char *ip)
    {
    ...
    }

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Ben non.
    Ton avant-dernier post était potable, le dernier est revenu en arrière et est complètement faux.

    PS: Es-tu sûr que tu as vraiment besoin d'un pointeur non-const ?
    (oui, c'est dans ce sens-là qu'on pose la question, pas l'inverse)

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    j'ai un autre soucie :

    appel d'une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char ip[] = "129.0.0.1";
    reponse(&ip);
    fonction "reponse" (si je fais un printf de "ip" dans cette fonction aucun problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <stdio.h>
    void reponse(char *ip)
    {
        test(&ip);
    }
    fonction test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int test(char *ip)
    {
        printf("%s\n",ip);
    }
    lorsque j'affiche, j'ai P√" qui s'affiche...

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    OK, l'heure est grave: Ton compilateur est mal configuré.
    Quel compilo utilises-tu ?

  8. #8
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    dev c++

    c'est quoi un pointeur non-const ?

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    C'est un pointeur qui n'a pas "const". (un char * par exemple).

    Ouvre les options de compilation de Dev-C++, et dans la zone "ajouter ces paramètres au compilateur", tape:
    Cela devrait constituer le minimum vital pour les warnings.

  10. #10
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    ip est un tableau de char donc ca se comporte déjà, lorsqu'on parle pointeur, comme un char *. Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void reponse(char *ip);
    void test(char * ip);
     
    ...
     
    char ip[] = "129.0.0.1";
    reponse(ip);
     
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void reponse(char *ip)
    {
        test(ip);
    }
     
    void test(char * ip)
    {
        printf("%s\n", ip);
    }
    Si tu écris &ip ce sera plus un char * mais l'adresse d'un char * soit un char **.

  11. #11
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    j'ai été dans "outils" > "option du compilateur" > onglet "compilateur" j'ai coché l'option "ajouter les commandes suivantes lors de l'appel au compilateur" et ajouter "-Wall -Wextra" dans le champs texte et valider.

    J'ai recompilé et j'ai toujours ces drole de caractères qui s'affiche.

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Mais maintenant, tu dois avoir des tas de warnings qui t'expliquent pourquoi...

  13. #13
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    Melem, effectivement cela résout le problème ! merci

    le cours que j'ai lu comporte donc des erreurs...

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Il ne reste plus qu'à rajouter const à tous ces pointeurs, pour chaque fonction qui ne modifie pas ip ni n'appelle aucune fonction modifiant ip.

    La règle, c'est "on n'utilise des pointeurs sans const que quand on doit modifier la(les) valeur(s) pointée(s)".

  15. #15
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void reponse(const char *ip)
    {
        test(ip);
    }
     
    void test(const char * ip)
    {
        printf("%s\n", ip);
    }

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Oui

  17. #17
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    ok c'est fais ! merci des conseils.

    Je suis total débutant en C j'ai commencer hier ! lol

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 573
    Points
    41 573
    Par défaut
    OK.
    C'est quand on débute qu'il est le plus important d'avoir un compilateur bien configuré, et de bien lire les warnings.

    Plus d'infos ici:
    http://emmanuel-delahaye.developpez....tm#cfg_compilo

  19. #19
    Membre actif
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Points : 287
    Points
    287
    Par défaut
    nickel, ces conseils mon permit de résoudre d'autres problèmes

    Merci de votre patience !

  20. #20
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Juste pour préciser :
    signifie qu'on ne peut pas modifier les données pointées par ip (ip est un pointeur sur const char), c'est bien ce que l'on cherche. Mais si on veut qu'on ne peut pas modifier le pointeur ip, on écrirait plutôt :

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2013] Requete avec comme parametre des variables.
    Par NenciariniL dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/05/2015, 11h28
  2. [Toutes versions] Croiser des données avec comme synthèse des données alphanumériques
    Par Philippe Tulliez dans le forum Contribuez
    Réponses: 0
    Dernier message: 19/02/2014, 08h48
  3. surcharge de fonction avec comme paramètre Object
    Par poporiding dans le forum C++
    Réponses: 8
    Dernier message: 14/07/2006, 03h47
  4. [VB.NET][Excel] utiliser des fonction Excel comme xlToRight
    Par Alexj51 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/03/2006, 12h10
  5. Retrouver les valeurs des paramètres des fonctions d'une DLL
    Par Bernard Martineau dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 10h42

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