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 6
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
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 6
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 6
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 1
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 6
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 6
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 6
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
Rejoignez-nous