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 :

Fonction renvoyant une chaîne de caractères


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 30
    Points
    30
    Par défaut Fonction renvoyant une chaîne de caractères
    Bonjour à tous et à toutes! Voilà mon problème est tout simple, mais cela n'empêche que je n'arrive pas à le résoudre.

    J'ai une fonction char* qui effectue des opérations sur une chaîne de caractères que je récupère préalablement, mais mon problème est que quand je renvoie la variable que je veux dans mon main, elle me retourne NULL...

    Voici mon code : Cette fonction récupère la visibilité d'un aéroport.
    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
    char* visibilite(char metar2[1500]) 
    {
     
    	char *visib=NULL;
     
    	strtok(metar2, " ");
    	strtok(NULL, " ");
    	strtok(NULL, " ");
    	strtok(NULL, " ");
    	strtok(NULL, " ");
    	visib = strtok(NULL, " ");
    	printf("%s",visib);
     
    	return visib;
    }
    Donc ici, c'est visib qui me renvoie NULL lorsque je la renvoie dans mon Main.
    Pourtant en affichant un simple printf dans cette fonction, je m'aperçois que visib n'est pas égal à NULL...

  2. #2
    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
    Poste un code complet qui reproduise le problème, car apparemment il n'y en a pas (de problèmes) dans cette fonction.

    Testée avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main(void)
    {
      char t[]= "11 22 33 44 55 66 77 88 99";
      char * p = visibilite(t);
      if(p!= NULL) printf("\n%s",p);
      return 0;
    }
    on obtient bien
    66
    66

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Je vous remercie pour m'avoir répondu. Oui, moi aussi quand j'affiche un printf() dans la fonction, cela fonctionne, par contre, quand je veux récupérer visib dans le main(), j'obtiens visib=NULL alors que dans la fonction j'affiche bien quelque chose...

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define TAILLEMAX 1500
     
     
     
     
    char* visibilite(char metarBrut[TAILLEMAX]) 
    {
     
    	char *visib;
     
    	strtok(metarBrut, " ");
    	strtok(NULL, " ");
    	strtok(NULL, " ");
    	strtok(NULL, " ");
    	strtok(NULL, " ");
    	visib = strtok(NULL, " ");
    	printf("%s",visib);
     
    	return visib;
    }
     
     
     
    int main (int argc, const char * argv[]) 
    {
        char metarBrut[TAILLEMAX]="1463602 3 KDEN 301653Z 00000KT 10SM FEW140 BKN220 02/M04 A2991 RMK AO2 SLP140 T00171039 KDEN 2011-01-30T16:53:00Z 39.83 -104.65 1.7 -3.9 0 0 10.0 29.911417 1014.0 TRUE VFR METAR 1640.0 KDEN 301553Z 24003KT 10SM FEW140 BKN220 M01/M04 A2991 RMK AO2 SLP146 T10111044 KDEN 2011-01-30T15:53:00Z 39.83 -104.65 -1.1 -4.4 240 3 10.0 29.911417 1014.6 TRUE VFR METAR 1640.0 KDEN 301453Z 34004KT 7SM FEW140 BKN200 M03/M06 A2992 RMK AO2 SLP152 T10331056 55003 KDEN 2011-01-30T14:53:00Z 39.83 -104.65 -3.3 -5.6 340 4 7.0 29.920275 1015.2 TRUE VFR -0.3 METAR 1640.0 KDEN 301353Z 32004KT 10SM SCT120 OVC200 M03/M06 A2992 RMK AO2 SLP147 T10331056 KDEN 2011-01-30T13:53:00Z 39.83 -104.65 -3.3 -5.6 320 4 10.0 29.920275 1014.7 TRUE VFR METAR 1640.0";
    	char *visib;
     
    	visibilite(metarBrut);
     
    	//La fonction Printf() me renvoie ici NULL...
    	printf("La visibilité est de : %s",visib);
     
     
     
     
    	return 0;
    }

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Bien oui, forcément, tu ne récupères pas ce que la fonction renvoie, ça ne peut donc pas marcher.

    Le "visib" de la fonction "main" et celui de la fonction "visibilite" sont deux objets différents, bien que portant le même nom. L'un est local à la première fonction, l'autre est local à la seconde : ce sont deux objets à part entière.

    Si une fonction renvoie une valeur, il faut l'affecter à un objet de la fonction appelante. Dans ton cas, ce sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    visib = visibilite(metarBrut);

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. [Batch] Déplacer un fichier en fonction d'une chaîne de caractères
    Par Mantrin dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 08/06/2012, 09h47
  3. [XL-2000] Fonction séparant une chaîne de caractères
    Par MaTtaW dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/12/2010, 14h27
  4. Fonction retournant une chaîne de caractères
    Par lamyruth dans le forum C
    Réponses: 2
    Dernier message: 04/01/2010, 10h58
  5. Réponses: 5
    Dernier message: 15/02/2005, 18h07

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