Partager via


_searchenv_s, _wsearchenv_s

Recherche un fichier en utilisant des chemins d’environnement. Ces versions ont des améliorations de _searchenv _wsearchenvsécurité, comme décrit dans les fonctionnalités de sécurité du CRT.

Important

Cette API ne peut pas être utilisée dans les applications qui s’exécutent dans le Windows Runtime. Pour plus d’informations, consultez Fonctions CRT non prises en charge dans les applications de la plateforme Windows universelle.

Syntaxe

errno_t _searchenv_s(
   const char *filename,
   const char *varname,
   char *pathname,
   size_t numberOfElements
);
errno_t _wsearchenv_s(
   const wchar_t *filename,
   const wchar_t *varname,
   wchar_t *pathname,
   size_t numberOfElements
);
template <size_t size>
errno_t _searchenv_s(
   const char *filename,
   const char *varname,
   char (&pathname)[size]
); // C++ only
template <size_t size>
errno_t _wsearchenv_s(
   const wchar_t *filename,
   const wchar_t *varname,
   wchar_t (&pathname)[size]
); // C++ only

Paramètres

filename
Nom du fichier à rechercher.

varname
Environnement dans lequel effectuer la recherche.

pathname
Mémoire tampon destinée à stocker le chemin d’accès complet.

numberOfElements
Taille de la pathname mémoire tampon.

Valeur retournée

Zéro si l'opération a réussi ; code d'erreur en cas de échec.

Si filename est une chaîne vide, la valeur de retour est ENOENT.

Conditions d’erreur

filename varname pathname numberOfElements Valeur retournée Contenu de pathname
n'importe laquelle tous NULL n'importe laquelle EINVAL n/a
NULL n'importe laquelle tous n'importe laquelle EINVAL inchangé
n'importe laquelle tous n'importe laquelle <= 0 EINVAL inchangé

Si l’une de ces conditions d’erreur se produit, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions attribuent à errno la valeur EINVAL et retournent EINVAL.

Notes

La routine _searchenv_s recherche le fichier cible dans le domaine spécifié. La variable varname peut être une variable d’environnement ou une variable définie par l’utilisateur quelconque qui spécifie une liste de chemins de répertoires, tels que PATH, LIB et INCLUDE. Sachant que _searchenv_s respecte la casse, varname doit correspondre à la casse de la variable d'environnement. Si varname elle ne correspond pas au nom d’une variable d’environnement définie dans l’environnement du processus, la fonction retourne zéro et la pathname variable n’est pas modifiée.

La routine recherche d’abord le fichier dans le répertoire de travail actif. S’il ne trouve pas le fichier, il examine ensuite les répertoires spécifiés par la variable d’environnement. Si le fichier cible se trouve dans l'un de ces répertoires, le chemin d'accès qui vient d'être créé est copié dans pathname. Si le filename fichier est introuvable, pathname contient une chaîne vide terminée par null.

La mémoire tampon pathname doit faire une longueur minimale de _MAX_PATH caractères pour loger le nom de chemin d'accès construit dans son intégralité. Sinon, _searchenv_s risque de saturer la mémoire tampon pathname et occasionner un comportement inattendu.

_wsearchenv_s est une version à caractères larges de _searchenv_s; les arguments de _wsearchenv_s sont des chaînes à caractères larges. Sinon,_wsearchenv_s et _searchenv_s se comportent de la même façon.

En C++, l’utilisation de ces fonctions est simplifiée par les surcharges de modèle ; les surcharges peuvent déduire la longueur de la mémoire tampon automatiquement (ce qui évite d’avoir à spécifier un argument taille) et peuvent remplacer automatiquement les fonctions plus anciennes et non sécurisées par leurs équivalentes plus récentes et sécurisées. Pour plus d'informations, consultez Sécuriser les surcharges de modèle.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Mappages de routines de texte générique

Routine Tchar.h _UNICODE et _MBCS non définis _MBCS défini _UNICODE défini
_tsearchenv_s _searchenv_s _searchenv_s _wsearchenv_s

Spécifications

Routine En-tête requis
_searchenv_s <stdlib.h>
_wsearchenv_s <stdlib.h> ou <wchar.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_searchenv_s.c
/* This program searches for a file in
* a directory specified by an environment variable.
*/

#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   char pathbuffer[_MAX_PATH];
   char searchfile[] = "CL.EXE";
   char envvar[] = "PATH";
   errno_t err;

   /* Search for file in PATH environment variable: */
   err = _searchenv_s( searchfile, envvar, pathbuffer, _MAX_PATH );
   if (err != 0)
   {
      printf("Error searching the path. Error code: %d\n", err);
   }
   if( *pathbuffer != '\0' )
      printf( "Path for %s:\n%s\n", searchfile, pathbuffer );
   else
      printf( "%s not found\n", searchfile );
}
Path for CL.EXE:
C:\Program Files\Microsoft Visual Studio 2010\VC\BIN\CL.EXE

Voir aussi

Contrôle d’annuaire
_searchenv, _wsearchenv
getenv, _wgetenv
_putenv, _wputenv