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 :

Tableau double en paramètre de retour


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Points : 22
    Points
    22
    Par défaut Tableau double en paramètre de retour
    bonjour j ai du mal, je traite une chaine (entrée en paramètre) la coupe en morceaux et veux mettre le tableau obtenu en paramètre retour dans ma fonction. en C (tradi) comment m'y prends-je ? Je n'arrive pas à trouver de réponse .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void Qmain(char *,const int lg_txt,char * co); // le proto
     
    {.....
    // à la fin j'ai ça qui marche
     
     chptr[t][i]=stringbleu[ii+i] ;
     chptr[t][i]='\0';
                        printf(" xxx=> %s\n",chptr[t]);
                        fprintf(fp," xxx=> %s\n",chptr[t]);
                        break;
     
    }
    J'ai donc un tableau de chptr[][], comment je le passe en paramètre de retour ? Est-ce faisable ?
    en fait mon tableau est double c est un char[100][100] déterminé dans le corps de la fonction.
    je sais qu'en entrée je le passerais genre char [][profondeur], mais en sortie je sais pas.
    merci.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Beaucoup de questions en une.
    1. Oui tu peux retourner un tableau en utilisant l'adressage indirecte,
    2. Comme apparemment tu ne connais pas la taille exacte de ton tableau à l'avance il te faudra l'allouer dynamiquement dans ta fonction (malloc()

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Je crains fort que le tableau chptr[][] soit créé comme variable locale à la fonction et qu'il souhaite renvoyer son adresse. Si c'est le cas la réponse est simple : impossible et ce serait une grave erreur que de le tenter.
    Il y a une règle absolue : on ne doit jamais renvoyer de quelque façon que ce soit l'adresse d'une variable locale. La raison est que les variables locales sont détruites en sortie de fonction et que l'on a alors l'adresse de quelque chose qui n'existe plus.

    Si le tableau est construit par la fonction, il doit l'être par allocation dynamique.

    Si le tableau a été passé par paramètre à la fonction comme char chptr[][profondeur], alors le type exact de chptr est char (*chptr)[profondeur] (Les deux écritures sont équivalentes dans une liste de paramètres). Dans ce cas, ce doit être le type de retour de la fonction.
    On a alors une syntaxe un peu ésotérique qu'on peut voir dans l'exemple suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // la fonction
    char (*fonc( char chptr[][4]))[4]
    {
       chptr[1][2] = 123;
       return chptr;
     }
    // l'appel 
    int main(void)
    {
       char tab[3][4];
       char (*p)[4] = fonc(tab);
       return 0;
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 23
    Points : 22
    Points
    22
    Par défaut gould variat. goldberg en 45t cbs ça ça pète . bref
    Merci pour ta réponse donc en fait le tableau déterminé avant l appel de fonction ce qui implique de connaitre la taille qu il va prendre. Je potasse j'essaie et te remercie en attendant . À plus Christophe

Discussions similaires

  1. Tableau à double entrée en paramêtre
    Par nerixm dans le forum C
    Réponses: 9
    Dernier message: 28/07/2006, 20h46
  2. Passage d'un tableau javascript en paramètres d'une URL
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 02/09/2005, 10h46
  3. Réponses: 3
    Dernier message: 30/05/2005, 23h28
  4. Comment passer un tableau dynamique en paramètre ?
    Par Charette dans le forum Langage
    Réponses: 2
    Dernier message: 21/04/2005, 11h28
  5. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07

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