String [Résolu]

Signaler
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008
-
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008
-
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

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

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
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008

Aucun effet à part des erreurs de compilation
Je vais creuser mais si vous avez une idée n'hésiter pas
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008

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 !!!
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Montre nous plus de code.
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

Re

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

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

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!!!
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Utilise des char * tout simplement.

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

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.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Comment ça pouvait compiler avec des cout si tu n'avais pas inclue iostream ?

C++ (@++)<!--
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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 ?
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
A tout hasard, tu avais pas écris un truc de ce genre ?

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

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.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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++ (@++)<!--
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
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.
Messages postés
95
Date d'inscription
lundi 25 décembre 2006
Statut
Membre
Dernière intervention
25 juillet 2008

Je comprends mieux merci pour vos conseils je m'en souviendrai.