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 :

help ? comment recup le nom de fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 36
    Par défaut help ? comment recup le nom de fichier
    bonjour
    je voudrais récuperer dans une variable le nom du fichier passé par paramètre dans argv[1] du main dans une variable

    donc j'ai mon main

    int main(int argc, char *argv[])

    une variable
    char filename;

    et je veux que filename prenne la valeur de argv[1]

    si je fais
    filename = argv[1] ça marche pas
    mess err : assignement makes integer from pointer without cast

    pouvez vous me débloquer

    cdt

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    char filename[256];
    ca marchera mieux.
    et on ne fait pas un affectation avec "=" pour une chaine de caractères, on fait scrcpy.

  3. #3
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Bonjour,

    argv est un tableau de pointeurs sur des "chaînes" de caractères. argv[0] correspond au nom du programme, et argv[1] jusqu'à argv[argc-1] aux autres paramètres de la ligne de commande.

    Je te conseil en premier lieu de vérifier si tu as bien un ou plusieurs paramètres, sinon tu risques d'avoir un "segment fault" lors de la récupération.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        // Cas où il n'y ai pas de paramètres
        if(argc<2) {
            printf("Utilisation: '%s [nom du fichier]'.\n", argv[0]) ;
            return EXIT_SUCCESS ;
        }
    Et comme l'a dit fregolo52, il te faut déclarer une chaine du nombre max + 1 de caractères que peu faire ton nom de fichier : me parait un bon compromis. Le +1 correspond au fait qu'une chaine de caractères en C se doit de toujours finir par un 0.

    Donc après le contrôle du nombre de paramètres, soit tu utilises argv[1] comme paramètres de tes fonctions de gestion de fichier, soit tu copies argv[1] dans fileName[x] par la fonction strcpy, ou la fonction sprintf.
    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
    void main(int argc, char *argv)
    {
        char fileName[256] ;
     
        // Cas où il n'y ai pas de paramètres
        if(argc<2) {
            printf("Utilisation: '%s [nom du fichier]'.\n", argv[0]) ;
            return EXIT_SUCCESS ;
        }
     
        // Ouverture avec argv[1]
        handFile = fopen(argv[1], "r+") ;
        if(handFile==NULL)  // Gestion de l'erreur
     
        // Ouverture par copie de argv[1]
        sprintf(fileName, "%s", argv[1]) ;
        // ou
        strcpy(fileName, argv[1]) ;    // Il faut inclure <string.h>
     
        handFile = fopen(fileName, "r+") ;
        if(handFile==NULL)  // Gestion de l'erreur
    Bonne continuation.

  4. #4
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Bonjour,
    La norme, pour les environnements hosted, dit en 5.1.2.2.1 Program startup (simple et court, utile à lire) affirme:
    The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, and retain their last-stored values between program startup and program termination.
    Vous n'êtes donc pas tenu de dupliquer la chaîne argv[1], ni même d'utiliser une variable char* filename (qui contiendra un pointeur). Si vous tenez à disposer de cette variable, vous pouvez faire simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[]) {
    	const char* filename = argc > 1 ? argv[1] : "";
    	puts(filename);
    	return EXIT_SUCCESS;
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 36
    Par défaut Merci
    Merci a tous pour vos indications
    je vais mettre cela en place de suite
    cdt

Discussions similaires

  1. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  2. Réponses: 2
    Dernier message: 25/05/2006, 11h11
  3. Réponses: 3
    Dernier message: 30/01/2006, 16h24
  4. ShellListView : comment récupérer les noms des fichiers?
    Par Lolo1988 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 11/12/2005, 23h19
  5. Comment récupérer le nom du fichier sans le chemin ?
    Par st0nky dans le forum Débuter
    Réponses: 3
    Dernier message: 08/12/2005, 11h01

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