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 :

Ajout de '\' dans une string


Sujet :

C++

  1. #21
    Membre régulier Avatar de dockurt2k
    Inscrit en
    Juillet 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juillet 2006
    Messages : 91
    Points : 98
    Points
    98
    Par défaut
    Moi du std::string avec du MFC ca me choque pas.
    Pour avoir une partie métier portable comme le dit Dark-Water, ca à son avantage. A moins d'utiliser des char *, mais ce n'est ni sur ni pratique

  2. #22
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par rigobert
    je pense que ceci n'est pas bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	string path = FileOpenDialog.GetPathName();
    	const char* fil = new char[path.size()];
    	fichier = new char[path.size()];
    	fil = path.c_str();
    	strcpy(fichier,fil);
    parce que :

    1. la mémoire allouée pour fichier est insuffisante --> corruption lors de strcpy().
    2. fil est alloué pour rien : le pointeur est réaffecté derrière sur path.c_str() --> fuite.

    As-tu essayé de passer directement path (retourné par FileOpenDialog.GetPathName()) à Object::Importer() ?
    ouep j'ai rectifié mais ca change rien et avec path ca change rien non plus

    Ps petite rectif sur le code j'avais retiré des commentaires qui fallait pas
    est mon ami !!!

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Sinon il y a aussi un cast implicite qui me parait un peu douteux dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string path = FileOpenDialog.GetPathName();
    si à la place tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CString s = FileOpenDialog.GetPathName();
    std::string path ((LPCTSTR) s);
    Ca donne quoi ?
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  4. #24
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    rien de nouveau toujours le meme plantage
    est mon ami !!!

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    donc tu dis que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CString s = FileOpenDialog.GetPathName();
    std::string path ((LPCTSTR) s);
    std::ifstream f (path.c_str());
    ne marche pas (f invalide) ??
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  6. #26
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par rigobert
    donc tu dis que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CString s = FileOpenDialog.GetPathName();
    std::string path ((LPCTSTR) s);
    std::ifstream f (path.c_str());
    ne marche pas (f invalide) ??
    non non ca change rien par rapport a ce que j'avais avant

    ps g pas mis le f car j'ai besoin d'un string
    est mon ami !!!

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Dark-Water
    non non ca change rien par rapport a ce que j'avais avant

    ps g pas mis le f car j'ai besoin d'un string
    Dans mon exemple f est un flux, pas une chaine ?!

    Es-tu sûr d'avoir bien compris ce que sont et à quoi servent les objets standards que tu utilises (string, ifstream, CString ...) ?

    Parce que là j'ai comme un sérieux doute...
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  8. #28
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    non ce que je veux dire je l'ai pas mis car il ne me sert a rien
    est mon ami !!!

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    tu ne réponds pas à ma question

    - ton code (ou ce que tu en as posté) est embrouillé ;
    - les réponses que tu fais paraissent embrouillées ;

    j'en déduis donc que tu as toi-même une vision un peu embrouillée du programme que tu es entrain de faire.

    est-ce que je me trompe ?
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  10. #30
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    mon programme est embouillé moi un peu moins et j'ai compris ce que veux faire mais ca change rien.

    Je presice que j'ai rectifé le code fourni y'avait des trucs qui servait à rien
    est mon ami !!!

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    mouais.

    le dernier bout de code que j'ai posté n'était pas un code "fourni" à insérer dans le tien, mais une illustration de mon propos.

    dans ton code tu peux aussi commenter ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	string spath;
    	spath = path.substr(0,path.find('\n'));
    	istringstream iss( spath );
    et passer directement path à la fonction Importer()
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  12. #32
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Exact c rectifié

    Ce que tu me disais de faire avec f est fait dans la fonction importer
    est mon ami !!!

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    donc maintenant file dans Importer() est forcément bon, non ?
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  14. #34
    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
    Pour en revenir à l'histoire de l'antislash, si on veut mettre un \ dans une chaîne, il faut toujours en mettre deux à la suite, car un antislash indique au compilateur l'insertion d'un caractère spécial (enfin, pas seulement). Jète un coup d'oeil ici : http://www.ann.jussieu.fr/courscpp/S...Sect02-B0.html

    Donc, si tu as une chaîne C:\bidule\fichier.txt, elle sera interpretée comme ceci avec le compilo : C: + caractère ASCII 8 + idule + caractère ASCII 12 + ichier.txt.
    Et un c:\toto.txt sera interpreté comme ceci : c: + caractère ASCII 9 + oto.txt.

    EDIT:
    Je rajoute un exemple. Dans ton code, tu as (par exemple) un while ( getline ( iss, mot, '\' ) ). Mais par conséquent, le compilo l'interprètera donc de cette façon : while ( getline ( iss, mot, '' ) ). Forcément, ça change tout. \', en C++, correspond au caractère ASCII '.
    EDIT 2:
    Petite précision. De plus, dans le dernier exemple, le caractère \' ne sera pas interpreté en tant que apostrophe en tant que tel (qui permet, en C++, de remplacer un caractère ASCII), mais il sera interpreté en tant que caractère ASCII aspostrophe. Et là, ça change tout, car le compilateur attendra le ' final. Donc, le compilo renverra une erreur de syntaxe.
    Dans le même principe, si on veut une chaîne bidule "truc", il faudra ABSOLUMENT précèder le " par un \ pour que le compilo n'interprete pas ce caractère, mais qu'il le considère comme un simple caractère ASCII. Car sinon le guillemet sera interpreté comme "délimiteur" (je ne sais pas si ce mot convient) de chaîne, comme dans une instruction du style : char chaine[]="toto";. Tu vois à peu près ce que je veux dire ?

  15. #35
    Membre averti
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Points : 307
    Points
    307
    Par défaut
    Juste pour un essai supplémentaire, tu pourrais
    remplacer les '\' (simple) par des '/'

    sinon la fonction d'origine où il y a val = val + "\\" + mot
    il faudrait au moins val = val + "\\\\" + mot
    si la fonction s'appelle effectivement "doublerQuote"

  16. #36
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par rigobert
    donc maintenant file dans Importer() est forcément bon, non ?
    Non j'ai rien dans file
    c'est le std::ifstream file (path.c_str()); qui merde
    est mon ami !!!

  17. #37
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Hylvenir
    Juste pour un essai supplémentaire, tu pourrais
    remplacer les '\' (simple) par des '/'

    sinon la fonction d'origine où il y a val = val + "\\" + mot
    il faudrait au moins val = val + "\\\\" + mot
    si la fonction s'appelle effectivement "doublerQuote"
    en effet while ( getline ( iss, mot, '\' ) ) marche pas mais avec while ( getline ( iss, mot, '\\' ) ) c'est OK de meme qu'il faut val = val + "\\\\" + mot

    Le probleme de \\ est résolu néamoins ca a pas regler mon problème de fichier comme je l'avait espérer
    je n'ai aucun flux dans file
    est mon ami !!!

  18. #38
    Membre régulier Avatar de dockurt2k
    Inscrit en
    Juillet 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juillet 2006
    Messages : 91
    Points : 98
    Points
    98
    Par défaut
    Donc pour résumer,
    une chaine hard-coded ca marche
    une chaine resultat d'un dialog box, ca marche pas

    Donc c'est sur les deux chaînes non pas la même valeur. Sinon ...

    Essaye de comparer les deux string (std::string::compare() je croit), si ca te retourne 0 alors c'est qu'il doit y avoir un trou dans le continum espace temps chez toi

  19. #39
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par Dark-Water
    Le probleme de \\ est résolu néamoins ca a pas regler mon problème de fichier comme je l'avait espérer
    je n'ai aucun flux dans file
    Ca on l'avait dis...

    Tu pourrais pas afficher le retour de FileOpenDialog.GetPathName() dans une boîte de dialogue pour voir ce que tu obtiens ?

  20. #40
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Eusebe
    Ca on l'avait dis...

    Tu pourrais pas afficher le retour de FileOpenDialog.GetPathName() dans une boîte de dialogue pour voir ce que tu obtiens ?

    j'ai bien le chemin d'accès je l'ai verifier au debugger
    est mon ami !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Ajout aléatoire d'une String dans une balise XML à partir d'un tableau de String
    Par chebmo1986 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 19/03/2009, 11h21
  2. mettre un entier dans une string
    Par kinder29 dans le forum SL & STL
    Réponses: 14
    Dernier message: 14/02/2005, 11h54
  3. [DOM] sauver dans une String
    Par hocinema dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 28/09/2004, 21h44
  4. [Débutant][JSP] Ajout des caractères à une String...
    Par Henkyl dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 04/03/2004, 16h30
  5. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26

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