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 :

petit soucis de traitement sur les chaines de caracteres.


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut petit soucis de traitement sur les chaines de caracteres.
    Bonjour,
    j'ai ecris une petite fonction qui me permet de modifier une chaine de caractere. Cette chaine est un chemin (ex: C:\unRepertoire ), et la fonction me renvoi le repertoire courant ( dans ce cas: C: enfin dans la theorie).

    Helas, ma fonction ne fonctionne que dans un cas.. mais je ne comprend pas pourquoi :/

    je vous montre mon code..
    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
    #include<iostream>
     
    using namespace std;
     
    void cdup(char* path){
        char *tmp;
        int i;
        tmp = strrchr(path,'\\');
        i = tmp-path;
        strncpy(tmp,path,i);
        strcpy(path, tmp);
        delete tmp;
    }
     
    int main (){
        char path[MAX_PATH] ="c:\\test\\qwerty";
        char path1[MAX_PATH] ="c:\\test";    
        char path2[MAX_PATH] ="c:\\test\\vfdzgdagf\\qwerrrrrr\\aaaa\\qwwer";        
        cdup(path);
        cdup(path1);        
        cdup(path2);        
        cout << "path : " << path << endl;
        cout << "path1: " << path1 << endl;    
        cout << "path2: " << path1 << endl;        
        system("PAUSE");
        return 1;
    }
    les resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    path : c:\test
    path1: c:est
    path2: c:est
    Appuyez sur une touche pour continuer...
    Si quelqu'un pouvait m'eclaircir les idees...

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si je comprends bien, ta fonction doit simplement tronquer la chaîne juste avant le dernier backslash... Tu te compliques la vie pour rien, mon ami:
    Code C (eh oui, c'est pas vraiment du C++) : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void cdup(char * szPath)
    {
    char * const pBackSlash = strrchr(szPath, '\\');
    if(pBackSlash)
    	*pBackSlash = '\0';
    }

    PS: On peut savoir à quoi servait ton delete ? C'est un (mauvais) miracle que tu n'aies pas eu de crash...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    vu de loin je dirai qu'il y a des erreur de maniement de pointeurs... qu'est ce que tu delete à la fin de ta fonction ?

    bref, quoi qu'il en soit... tu es en c++ et tu ne profite pas du c++ c'est dommage en faite. Utilise des std::string pour manipuler des chaine de caractères.

    std::string au lieu des char* => + de fonctionnalités et pas de problème d'allocation/desallocation

    Edit : tu devrai lire ça http://c.developpez.com/faq/cpp/?page=strings

    tout un univer qui s'ouvre à toi
    Plus y'a d'Gruyère, plus y'a d'trous !
    Plus y'a d'trous, moins y'a d'Gruyère...
    Donc, Plus y'a d'Gruyère, moins y'a d'Gruyère !!!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Points : 307
    Points
    307
    Par défaut
    Le même en utilisant std::string :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void cdup(std::string & path)
    {
        std::string::size_type const index = path.rfind('\\');
        path = path.substr(0, index);
    }

    Si c'est destiné à être autre chose qu'un exercice, regarde boost::filesystem, pour éviter de ré-inventer la roue.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Merci pour vos reponses les gars je vais explorer tou ca

    pour le delete.. euh je pense que je devais pas etre bien reveille

    sinon pour le PK j utilise des char* plutot que des string C juste que je travail avec les socket et G lu que pour faire un send(...) ou un recv(...) il demandait des char* et je pensais donc eviter des conversion en plus.. mais peut etre qu il serit mieux d utiliser des string et de les convertir en char* par la suite ??

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par Aleksis
    je travail avec les socket et G lu que pour faire un send(...) ou un recv(...) il demandait des char* et je pensais donc eviter des conversion en plus.. mais peut etre qu il serit mieux d utiliser des string et de les convertir en char* par la suite ??
    Oui. C'est ce que fait la fonction membre std::string::c_str.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    merci

    je vais jeter un oeil sur la doc des string et tenter modif tout mon projet ki pour le moment utilise des char* et char[] dans tout les sens


    Merci a vous pour votre aide

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    ?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Laurent Gomila
    ?
    oups oui oui C resolu j'arrange ca

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. delete sur les chaines de caracteres avec visual
    Par NiamorH dans le forum Windows
    Réponses: 2
    Dernier message: 26/03/2007, 11h04
  2. besoin d'aide sur les chaine de caractere
    Par nico85 dans le forum C++
    Réponses: 10
    Dernier message: 13/01/2007, 12h03
  3. [CR 10] Traitement sur les chaines de caractères
    Par sylviefrfr dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 11/09/2006, 09h16
  4. probleme sur les chaines de caractere
    Par foufi5 dans le forum C
    Réponses: 8
    Dernier message: 22/12/2005, 15h30
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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