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 :

Questions fonction de type char *


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 12
    Points
    12
    Par défaut Questions fonction de type char *
    Bonjour,

    Je suis débutant en C et j'aimerai comprendre l’utilité d'une fonctions de type char * ou int *. Mon code permet d'obtenir le miroir d'une chaîne de caractères. Lorsque ma fonction miroir est de type char et non de type char *, j'ai le warning suivant : "return makes integer from pointer without a cast". Pourquoi faut-t-il caster cette fonction ? Est-ce que c'est parce que la fonction retourne T, qui est une chaîne de caractères ? Si c’était un tableau d'entier, je devrais utiliser int * ?

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char* miroir(char *T, int i);
     
    int main()
    {
        char ch[100];
        printf("Veuillez entrer votre cdc : \n");
        fgets(ch, 100, stdin);
        printf("%s", miroir(ch, 0));
        return 0;
    }
     
    char* miroir(char *T, int i)
    {
        int l, h;
        char temp;
        l = strlen(T);
        h = l / 2;
     
        if (i < h)
        {
            temp = T[i];
            T[i] = T[l - 2 - i];
            T[l - 2 - i] = temp;
            return miroir(T, i + 1);
        }
        else
            return T;
    }
    Merci en avance

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2017
    Messages : 12
    Points : 12
    Points
    12
    Par défaut
    C'est bon j'ai compris, c’était bien ce que je pensais !

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 629
    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 629
    Points : 30 859
    Points
    30 859
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par FoolBar Voir le message
    Je suis débutant en C et j'aimerai comprendre l’utilité d'une fonctions de type char * ou int *.
    Bonjour
    Une fonction est du type de l'élément qu'elle retourne. Si elle retourne un pointeur sur char elle sera du type "char *". C'est un peu comme si tu demandais "à quoi sert une fonction de type int". Sauf que ça tu ne le demandes pas parce que tu sais ce qu'est un int. Ben plus tard, quand tu sauras ce qu'est un "char *" tu ne le remanderas plus.

    Citation Envoyé par FoolBar Voir le message
    Mon code permet d'obtenir le miroir d'une chaîne de caractères. Lorsque ma fonction miroir est de type char et non de type char *, j'ai le warning suivant : "return makes integer from pointer without a cast".
    Ben oui. Un type "caractère" ce n'est absolument pas la même chose qu'un type "adresse d'une case mémoire contenant un caractère" !!! C'est comme si tu comparais "une maison" et "une carte permettant d'aller à la maison"

    Citation Envoyé par FoolBar Voir le message
    Pourquoi faut-t-il caster cette fonction ?
    Soigner un warning par un cast est presque toujours une mauvaise idée. Ca masque bien souvent une erreur de conception. Il vaut mieux lire le warning et trouver la solution plutôt que transformer un truc inadéquat en "ce qui ressemble à un truc adéquat"
    Citation Envoyé par FoolBar Voir le message
    Est-ce que c'est parce que la fonction retourne T, qui est une chaîne de caractères ? Si c’était un tableau d'entier, je devrais utiliser int * ?
    Hé oui. Pointeurs et tableaux vont bien souvent de pair. C'est parce qu'un tableau peut se manipuler par ladresse de son premier élément et que cette adresse se stocke dans un pointeur. Et qu'une chaine de caractères n'est en fait qu'un tableau.
    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. [COM] Definir un parametre de fonction de type char
    Par kacedda dans le forum Visual C++
    Réponses: 13
    Dernier message: 16/04/2008, 14h10
  2. Réponses: 22
    Dernier message: 03/01/2008, 23h42
  3. Réponses: 11
    Dernier message: 19/07/2007, 11h56
  4. [C#/DllImport] Comment appeler fonction de type char* ?
    Par SesechXP dans le forum C++/CLI
    Réponses: 1
    Dernier message: 18/08/2006, 11h02
  5. Réponses: 21
    Dernier message: 20/02/2006, 12h00

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