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 :

Retourner une chaîne de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Par défaut Retourner une chaîne de caractères
    Bonjour,

    Est-ce que quelqu'un saurait m'expliquer pour quelle raison cette fonction ne retourne pas le mot contenu dans le pointeur "*nomFich" :

    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
    char *lectureFichier(){
    	FILE *fich;
    	char ligne[LGL];
    	char nomFichier[LGL];
    	char *nomFich; // pointeur permettant de retourner le nom du fichier
    	nomFich = ligne;
    	printf("Nom du fichier a lire : ");
    	fgets(ligne, LGL, stdin);
    	sscanf(ligne, "%s", nomFichier);
    	fich = fopen(nomFichier, "r");
    	if (fich == NULL){
    		printf("Ouverture impossible fichier %s\n", nomFichier);
    	}
    	else{
    		printf("Fichier %s \n", nomFichier);
    		fgets(ligne, LGL, fich); // Lecture 1ère ligne
    		while (!feof(fich)) { // Tant que non fin de fichier
    			printf("%s", ligne); // Imprimer ligne à l’écran
    			fgets(ligne, LGL, fich); // Lecture ligne suivante
    		}
    		fclose(fich);
    	}
    	printf("Contenu de nomFich : ");
    	puts(nomFich);
    	return nomFich;
    }

    Merci pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Car nomFich est une variable local, et que ce qui est local, reste local ?

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Par défaut
    mais le propre d'une fonction n'est-il pas d'affecter le contenu retourné d'une variable locale à une variable du "main" ?

  4. #4
    Expert confirmé
    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
    Par défaut
    Oui ...

    ... mais nomFich contient l'adresse du premier élément du tableau local ligne et c'est donc cette adresse qui est retournée. Comme les objets locaux sont détruits en sortie de la fonction, ce tableau est détruit et tu stockes alors l'adresse de quelque chose qui n'existe plus.

    Moralité : On ne doit jamais retourner, de quelque façon que ce soit, l'adresse d'un objet local.

  5. #5
    Membre très actif
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Par défaut
    Est-ce qu'avec un void qui par définition ne retourne rien je peux contourner le problème ?

  6. #6
    Membre averti
    Homme Profil pro
    plombier
    Inscrit en
    Décembre 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : plombier
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 31
    Par défaut
    Bonjour, pour éviter ce problème alloue dynamiquement nomFichier

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 1
    Dernier message: 26/01/2013, 11h10
  3. Fonction retournant une chaîne de caractères
    Par lamyruth dans le forum C
    Réponses: 2
    Dernier message: 04/01/2010, 10h58
  4. Réponses: 5
    Dernier message: 15/02/2005, 18h07
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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