Comment utiliser correctement GetModuleFileName?
Code suivant:
#include <iostream>
#include <Windows.h>
using namespace std;
int main ()
{ LPWSTR buffer; //or wchar_t * buffer;
GetModuleFileName(NULL, buffer, MAX_PATH) ;
cout<<buffer;
cin.get();
cin.get();
}
Doit montrer le chemin complet où le programme s'exécute. Mais dans VS 2012, je reçois l'erreur:
non initialisé la variable locale "tampon" utilisé
Quel est le problème dans le code?
OriginalL'auteur Sunrise | 2013-09-13
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de lui donner une mémoire tampon qui peut contenir certains caractères;
par exemple.
GetModuleFileName
pouvez retournerERROR_INSUFFICIENT_BUFFER
pour de long trajet.À l'égard de l'OP, je pense que c'est correct. Il est peut-être qu'il y a des cas où cela n'est pas suffisant, et obtient une erreur, mais dans la plupart des cas,
MAX_PATH
est assez. Notez que l'OP utilise juste un pointeur non initialisé, et c'est CERTAINEMENT erroné.OriginalL'auteur Mats Petersson
VS correctement les points que vous êtes en utilisant un tampon non initialisé - tampon var est un pointeur vers WSTR, mais il n'a pas été initialisé avec la statique de la mémoire tampon, ni il a été affecté. Aussi, vous devriez vous rappeler que MAX_PATH est souvent pas assez, en particulier sur les systèmes modernes, avec de longs chemins d'accès.
Puisque vous êtes à l'aide de C++, ce serait une bonne pratique d'utiliser ses fonctionnalités. Je peux supposons que le code suivant:
Ne pas utiliser wstring de la mémoire tampon directement: il n'est pas défini pour avoir un tampon dans chaque mise en œuvre (mais est souvent le cas)
wstring
qui est une basic_string objet.OriginalL'auteur kingsb