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 :

Récupération du nom


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Points : 9
    Points
    9
    Par défaut Récupération du nom
    Bonjour.

    Je débute en C et j'ai quelques soucis
    Donc voilà, je voulais à partir d'un chemin récupérer le nom du fichier.
    Exemple:
    /home/here/here2/laphoto.bmp ==> laphoto.bmp

    je vous montre le code source:

    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
     
    #include <stdlib.h>
    #include <stdio.h>
     
    char *nom (char *chemin) {
     
    int i;
    int j;
     
    int position;
     
    char *name;
     
    for (i=0;i<1000;i++) {
     
        if(chemin[i] == '/' )  position=i;
     
    }
     
    for (j=0;j<1000-(position+1);j++) name[j]=chemin[j+position+1];
     
    return name;
     
    }
     
    int main () {
     
    char *chemin="/home/here/here2/latof.bmp";
     
    char *lenom;
     
    lenom=nom(chemin);
     
    printf(lenom);
     
    printf("\n");
     
    return 0;
     
    }

    quand je met un autre caractère que '/' , par exemple 'h' ou autre je récupère bien le chemin mais j'ai une erreur de segmentation (classique quoi )

    Donc voilà, j'y suis dessus pendant un long moment, si vous voulez bien m'aider.

    Merci d'avance.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Gio,

    Il faudrait penser à réserver de la mémoire pour "char *name", et plus tard, penser à libérer cette mémoire
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    tu as le choix entre 2 solutions :

    • Soit tu gardes le chemin original, et alors il faut que tu réserves de la place mémoire pour "name" et que tu copies dedans ce que tu veux
    • Soit tu ne gardes pas, et tu "déplaces" l'extrait que tu veux en début de chaîne..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    pas très propre de boucler 1000 fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (j=0;j<1000-(position+1);j++) name[j]=chemin[j+position+1];
     
    return name;
     
    }


    pourquoi tu boucles jusqu'à 1000 ?
    tu sais que pour tester la fin d'une chaine de caractères il suffit de tester la valeur '\0'..
    tu devrais utiliser la fonction strrchr pour trouver la dernière occurence de '\'
    http://www.cppreference.com/stdstring/strrchr.html

    Sers toi des fonctions de manipulation des chaînes de caractères :
    http://www.cppreference.com/stdstring/index.html

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Points : 9
    Points
    9
    Par défaut
    C'est bon j'ai pu résoudre le problème, merci pour votre aide.
    Voilà le code source:

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #include <stdlib.h>
    #include <stdio.h>
     
    char *nom (char *chemin) {
     
    int i=0;
    int j=0;
    int position;
    char *name;
     
    name=malloc(4*100);
     
     
    char c=chemin[0];
    char d=chemin[0];
     
    while (c != '\0' ) {
     
        if(c == '/' ) position=i;
        i++;
        c=chemin[i];
     
    }
     
    d=chemin[position+1];
     
    while( d != '\0' ) {
     
        name[j]=d;
        j++;
        d=chemin[position+1+j];
    }
     
     
    return name;
    free(name);
     
    }
     
    int main () {
     
    char *chemin="/home/here/here2/latof.bmp";
    char *lenom;
    lenom=nom(chemin);
    printf(lenom);
    printf("\n");
    return 0;
     
    }

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Gei,

    Tu n'as pas de chance, car si ça a marché, c'est par hasard:

    - Ta fonction nom réserve de la mémoire pour le pointeur name, bien (au fait, pourquoi cette taille 4*100 ?)

    - Puis, après avoir mis ce qu'il faut dans cette mémoire, elle renvoie ce pointeur

    - ET libère la mémoire correspondant !!

    Donc, dans le programme appelant, après réception du pointeur, les données pointées ne sont plus sensées être valides.
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Points : 9
    Points
    9
    Par défaut [Résolu] Récupétation du nom
    jé pas très bien compris
    Pour 4*100 c'est pour une chaine de 100 caractère.
    sinon peux-tu m'expliquer le reste??

    Merci.

  8. #8
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Une chaine de caractères est composée de caractères qui ont une taille d'un byte. Donc il n'y a pas de raison de faire un * 4.

    Au pire tu pourrais mettre 100 * sizeof(char) mais c'est complètement inutile.

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par droggo
    - Puis, après avoir mis ce qu'il faut dans cette mémoire, elle renvoie ce pointeur

    - ET libère la mémoire correspondant !!

    Donc, dans le programme appelant, après réception du pointeur, les données pointées ne sont plus sensées être valides.
    Le free() etant fait apre le return, il ne ser en jamais execute, le pointeur contient donc, au retour de la fonction, bien une adresse valide.

    Par contre du coup la zone n'est jamais liberee et il y a une fuite memoire.

  10. #10
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Aui,
    Citation Envoyé par gl
    Le free() etant fait apre le return, il ne ser en jamais execute, le pointeur contient donc, au retour de la fonction, bien une adresse valide.

    Par contre du coup la zone n'est jamais liberee et il y a une fuite memoire.
    Je n'avais même pas remarqué. J'ai vu un free, et je n'ai pas trop fait attention au reste.
    Si les cons volaient, il ferait nuit à midi.

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Salut,

    Je vous soumet une autre possibilité, je ne sais pas trop si c'est bon ...

    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
     
     char * extract_name( const char * p, int sep  )
     { char * z = strrchr( p ,  sep  ) ;
       if( z != NULL )  z++ ;
       if( z == NULL || *z == '\0' )  return NULL ;
       return z ;
     }
     
     void do2()
     {  char * z = NULL ;
        char * name = NULL ; 
        char * p = "/home/djm/linux/zorahpile/abc.c" ;
        printf("path= %s\n", p ) ;
        z = extract_name( p , '/');
        if( z != NULL  )
        { printf("res 1= %s len= %d\n", z, strlen(z) ) ;
          // ou encore ...
          name = ( char *) malloc( strlen(z)+1 ) ;
          strcpy( name, z ) ;
          printf("res 2= %s len= %d\n", name, strlen(name) ) ;
          if( name ) free( name ) ; 
        }
        else
        printf("%s\n", "too bad" );
     }
     
     int main( int argc , char * argv[]  )
     { do2() ;
       printf("terminé\n");
       return 0 ;
     }
    J'ai testé ça a l'air ok sans avoir à faire des boucles.

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par dj.motte
    Je vous soumet une autre possibilité, je ne sais pas trop si c'est bon ...

    J'ai testé ça a l'air ok sans avoir à faire des boucles.
    Alors poste le code que tu as testé, parce que là...
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `extract_name':
    main.c:3: warning: implicit declaration of function `strrchr'
    main.c:4: error: `NULL' undeclared (first use in this function)
    main.c:4: error: (Each undeclared identifier is reported only once
    main.c:4: error: for each function it appears in.)
    main.c: At top level:
    main.c:10: warning: function declaration isn't a prototype
    main.c: In function `do2':
    main.c:10: error: `NULL' undeclared (first use in this function)
    main.c:12: warning: initialization discards qualifiers from pointer target type
    main.c:13: warning: implicit declaration of function `printf'
    main.c:16: warning: implicit declaration of function `strlen'
    main.c:18: warning: implicit declaration of function `malloc'
    main.c:19: warning: implicit declaration of function `strcpy'
    main.c:21: warning: implicit declaration of function `free'
    main.c: At top level:
    main.c:27: warning: unused parameter 'argc'
    main.c:27: warning: unused parameter 'argv'
    Process terminated with status 1 (0 minutes, 1 seconds)
    4 errors, 10 warnings
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Salut,

    En ajoutant les #include ( stdio.h, string.h, stdlib.h ) ça devrait peut-être résoudre le pb.

    Avec linux, strrchr est compris. Je ne sais pas sur les autres plateformes.

    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
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    char * extract_name( const char * p, int sep  )
     { char * z = strrchr( p ,  sep  ) ;
       if( z != NULL )  z++ ;
       if( z == NULL || *z == '\0' )  return NULL ;
       return z ;
     }
     
     void do2()
     {  char * z = NULL ;
        char * name = NULL ; 
        char * p = "/home/djm/linux/zorahpile/abc.c" ;
        printf("path= %s\n", p ) ;
        z = extract_name( p , '/');
        if( z != NULL  )
        { printf("res 1= %s len= %d\n", z, strlen(z) ) ;
          // ou encore ...
          name = ( char *) malloc( strlen(z)+1 ) ;
          strcpy( name, z ) ;
          printf("res 2= %s len= %d\n", name, strlen(name) ) ;
          if( name ) free( name ) ; 
        }
        else
        printf("%s\n", "too bad" );
     }
     
     int main( int argc , char * argv[]  )
     { do2() ;
       printf("terminé\n");
       return 0 ;
     }
    Voilà mon grand, ce n'était pas difficile à deviner.

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par dj.motte
    En ajoutant les #include ( stdio.h, string.h, stdlib.h ) ça devrait peut-être résoudre le pb.
    Leger mieux...
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:14: warning: function declaration isn't a prototype
    main.c: In function `do2':
    main.c:16: warning: initialization discards qualifiers from pointer target type
    main.c: At top level:
    main.c:31: warning: unused parameter 'argc'
    main.c:31: warning: unused parameter 'argv'
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 4 warnings
    Ceci fonctionne, y compris sur des noms 'simples'....
    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
     
    #include <stdio.h>
    #include <string.h>
     
    char const *extract_name (const char *p, int sep)
    {
       char const *z = strrchr (p, sep);
       if (z != NULL)
          z++;
       else
          z = p;
       return z;
    }
     
    void do2 (void)
    {
       char const path[] = "abc.c.txt";
       printf ("path= %s\n", path);
       char const *z = extract_name (path, '/');
       if (z != NULL)
       {
          size_t const len = strlen (z);
          printf ("res 1= %s len= %d\n", z, len);
       }
       else
          printf ("%s\n", "too bad");
    }
     
    int main (void)
    {
       do2 ();
       printf ("finished\n");
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Salut

    Emmanuel, il n' y a plus d'erreur mais des avertissments :
    Project : Forums
    Compiler : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:14: warning: function declaration isn't a prototype
    main.c: In function `do2':
    main.c:16: warning: initialization discards qualifiers from pointer target type
    main.c: At top level:
    main.c:31: warning: unused parameter 'argc'
    main.c:31: warning: unused parameter 'argv'
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 4 warnings
    On peut améliorer extract_name ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char * extract_name( const char * p, int sep  )
     { if( p == NULL ) return NULL ;  // ajouté pour améliorer
       char * z = strrchr( p ,  sep  ) ;
       if( z != NULL )  z++ ;
       if( z == NULL || *z == '\0' )  return NULL ;
       return z ;
     }

  16. #16
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par zennn
    Bonjour.

    Je débute en C et j'ai quelques soucis
    Donc voilà, je voulais à partir d'un chemin récupérer le nom du fichier.
    Exemple:
    /home/here/here2/laphoto.bmp ==> laphoto.bmp

    je vous montre le code source:

    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
     
    #include <stdlib.h>
    #include <stdio.h>
     
    char *nom (char *chemin) {
     
    int i;
    int j;
     
    int position;
     
    char *name;
     
    for (i=0;i<1000;i++) {
     
        if(chemin[i] == '/' )  position=i;
     
    }
     
    for (j=0;j<1000-(position+1);j++) name[j]=chemin[j+position+1];
     
    return name;
     
    }
     
    int main () {
     
    char *chemin="/home/here/here2/latof.bmp";
     
    char *lenom;
     
    lenom=nom(chemin);
     
    printf(lenom);
     
    printf("\n");
     
    return 0;
     
    }

    quand je met un autre caractère que '/' , par exemple 'h' ou autre je récupère bien le chemin mais j'ai une erreur de segmentation (classique quoi )

    Donc voilà, j'y suis dessus pendant un long moment, si vous voulez bien m'aider.

    Merci d'avance.

    Si tu es sous linux (vu le chemin dans le code), il existe la commande "basename" qui fait exactement le boulot que tu demandes.
    Mais si tu tiens à le faire toi même, voici un code en peu plus simplifié :
    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
    #include <stdio.h>
    #include <string.h>
     
    const char *nom (const char *chemin)
    {
        const char *baseName = chemin + strlen(chemin);
     
        while (*baseName != '/' )
        {
            baseName--;
        }
        baseName++;
     
        return baseName;
    }
     
     
    int main (void)
    {
        printf("%s\n", nom("/home/here/here2/latof.bmp"));
        return 0;
    }
    Il y a peut être possibilité de simplifier encore plus...
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  17. #17
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Salut,

    Dans la version de crocodilex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const char *nom (const char *chemin)
    Que se passe-t-il, si chemin est NULL ?

  18. #18
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par dj.motte
    Salut,

    Dans la version de crocodilex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const char *nom (const char *chemin)
    Que se passe-t-il, si chemin est NULL ?
    Comportement indéterminé. C'était facile à deviner !
    Pas de Wi-Fi à la maison : CPL

  19. #19
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par dj.motte
    Salut,

    Dans la version de crocodilex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const char *nom (const char *chemin)
    Que se passe-t-il, si chemin est NULL ?
    Eh ben il se passe la même chose que dans la première version de ton code....

    PS ; A l'occasion il faudra que tu poses la même question aux gars qui ont écrit la libc.
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  20. #20
    Inactif  

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    534
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 534
    Points : 403
    Points
    403
    Par défaut
    Salut,

    Alors Emmanuel ou Crocodilex qu'est-ce qui ne va pas avec cette fonction d'extraction du dernier fichier ou de répertoire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char * extract_name( const char * p, int sep  )
     { if( p == NULL ) return NULL ;  
       char * z = strrchr( p ,  sep  ) ;
       if( z != NULL )  z++ ;
       if( z == NULL || *z == '\0' )  return NULL ;
       return z ;
     }
    C'est la forme qui fait défaut ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/02/2006, 11h24
  2. Récupération du nom d'un formulaire
    Par Crazyblinkgirl dans le forum ASP
    Réponses: 1
    Dernier message: 16/11/2005, 08h15
  3. [C#] [.NET] Récupération des noms de tables d'une base
    Par GuillaumeG dans le forum Windows Forms
    Réponses: 7
    Dernier message: 07/04/2005, 13h31
  4. [XSLT] Récupération du nom du fichier XML analysé
    Par Patkaza dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/01/2005, 11h28
  5. Récupération des noms de champs d'une table
    Par Battomura dans le forum SQL
    Réponses: 2
    Dernier message: 24/03/2003, 10h00

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