String

Résolu
MadMax1024
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008
- 1 juin 2007 à 23:21
MadMax1024
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008
- 3 juin 2007 à 13:10
Bonjour ou Rebonjour comme vous le sentez
Encore besoin de vos conseils.

Dans ma fonction principale (main) je fait appel à une fonction externe qui me renvoie une chaîne de type string je dit bien "string" et non "char"
Ma fonction marche correctement puisque en mode débuguage ma variable retourné me rend bien ce que je demande mais le seul problème c'est que dans ma fonction principale je n'arrive pas à l'afficher avec un printf ou cout mon appli plante à chaque essai.
Pour être plus compréhensible voici un bout de mon code :

#include <string>
std::string GetAppName( )
{
char szAppPath[_MAX_PATH ] = "";
std::string strAppName;
std::string strAppDirectory;
GetModuleFileName( 0, szAppPath,_MAX_PATH );
strAppName= szAppPath;
return strAppName ;
}

void main (void)
{
    std::string file;
    file =GetAppName( );
}

Mais la impossible d'afficher file

Merci d'éclairer ma lenterne !!!

17 réponses

luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
2 juin 2007 à 20:48
Bas je dis lol et re lol. Ton programme marche très bien:

SansNom2.cpp:
#include <string>
#include
#include <windows.h>

std::string GetAppName( )
{
char szAppPath[_MAX_PATH ] = "";
std::string strAppName;
std::string strAppDirectory;
GetModuleFileName( 0, szAppPath,_MAX_PATH );
strAppName= szAppPath;
return strAppName;
}

int main (void)
{
    std::string file;
    file=GetAppName( );
   
    std::cout << file << std::endl;
   
    system("PAUSE");
   
    return 0;
}

Sortie:
C:\Dev-Cpp\include\SansNom2.exe
Appuyez sur une touche pour continuer...

Dans ci peu de code, je vois mal ce qui ne pourrait pas marcher.
3
The_Guardian
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

1 juin 2007 à 23:30
RE donc :p

essaie ca:
strAppName = new string(szAppPath); et de voir si ca marche et aussi de mettre & dans le retour de la fonction getAppName
sans conviction

Une autruche ne se cuit pas aux petits lardons
0
MadMax1024
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008

1 juin 2007 à 23:43
Aucun effet à part des erreurs de compilation
Je vais creuser mais si vous avez une idée n'hésiter pas
0
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
2 juin 2007 à 00:19
Comment ca impossible ?

Rq : Tu fais du C++, donc ta fonction s'écrit plus lisiblement:

std::string GetAppName( )
{
   char szAppPath[_MAX_PATH ] = "";
   std::string strAppDirectory;
   GetModuleFileName( 0, szAppPath,_MAX_PATH );
   return std::string(szAppPath);
}

Je vois qu'une source possible: remplace par ca:
GetModuleFileName( 0, szAppPath,_MAX_PATH - 1);

Et dis nous si ca marche mieux.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MadMax1024
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008

2 juin 2007 à 13:12
Alors oui ton code marche mais dans tout les cas mon problème est toujours le même impossible d'afficher le retour de ma fonction et comme je l'ai précédemment elle contient bien le chemin de mon appli.
Pour être plus précis l'erreur obtenu lors d'un essai pour afficher ma variable est du type :

xxx.exe à rencontré un problème est doit fermer blabla etc... etc... vous voyez de quoi je parle

Bref si vous avez la solution n'hésiter pas !!!
0
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
2 juin 2007 à 17:40
Montre nous plus de code.
0
The_Guardian
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

2 juin 2007 à 18:02
Re

Ouais c'est vrai un peu plus de code ferait pas de mal :p

Une autruche ne se cuit pas aux petits lardons
0
MadMax1024
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008

2 juin 2007 à 20:36
lol et encore lol

le code vous l''avez devant les yeux j'en ai pas plus.
Je comence une nouvelle appli.

Si non au pire si vous avez un autre moyen qui permet de récuperer le non de l'aplication qui est lancer je sui prenant moi j'ai trouvez sa aprés y'a peut être d'autre fonction je ne sais pas.

merci quand même!!!
0
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
2 juin 2007 à 20:46
Utilise des char * tout simplement.

C++ (@++)<!--
0
MadMax1024
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008

2 juin 2007 à 20:59
Ah et bien je te dis un grand merci je n'avais pas inclus la classe iostream mais seulement la librairie
Sa fonctionne nikel merci a toi mais j'aime pas rester sur ma fin et je vais te demander pourquoi à ton besoin de la classe iostream.
0
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
2 juin 2007 à 22:11
Comment ça pouvait compiler avec des cout si tu n'avais pas inclue iostream ?

C++ (@++)<!--
0
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
2 juin 2007 à 23:24
Bas la fonction cout, le compilateur connait pas la magie. Faut bien qu'il la trouve quelque part, d'où l'utilité de iostream qui lui donne la définition de la fonction cout (notamment).

Mais oui, je renouvelle la question de Sakingdom, comment ton programme peut planter s'il peut pas compiler ?
0
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
2 juin 2007 à 23:28
A tout hasard, tu avais pas écris un truc de ce genre ?

    std::string test("coucou");
    printf("%s", test);
0
MadMax1024
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008

3 juin 2007 à 00:57
Pouer être clair j'avais inclus mais pas et depuis que j'ai inclu sa marche pour moi est une librairie est est une classe dite le moi si je me trompe.
0
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
3 juin 2007 à 04:36
Oui tu te trompe. iostream et iostream.h sont tout deux des fichiers header (fichier d'entête) et ne sont en aucun cas des librairies. Ils peuvent contenir des prototypes et des déclarations de classe ainsi que des macros et typedef mais elle ne contiennent aucune fonction ou classe entièrement écrite (sauf dans certains rares cas). Les librairies (.lib) contienne les fonctions ou les "procédures de liage" (j'ignore le vrai terme) aux librairies dynamiques. Elles contiennent aussi les classes du C++ et sont utilisées lors de l'édition des liens (le "linkage").

C++ (@++)<!--
0
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
3 juin 2007 à 12:35
A part un warning, concrètement, l'utilisation de ne pose pas de pb. Donc tu devrais pas  avoir de pbs avec. Ca n'empeche qu'il vaut mieux systématiquement utilisé , car le "using namespace std" doit etre explicitement écris dans ton programme (si tu veux te passer des "std::" dvt chaque fonction). Le fichier iostream.h n'en a pas besoin.
0
MadMax1024
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008

3 juin 2007 à 13:10
Je comprends mieux merci pour vos conseils je m'en souviendrai.
0