Condividi tramite


_splitpath_s, _wsplitpath_s

Suddivide un nome di percorso nei componenti. Queste funzioni sono versioni di , _wsplitpathcon miglioramenti della_splitpath sicurezza, come descritto in Funzionalità di sicurezza in CRT.

Sintassi

errno_t _splitpath_s(
   const char * path,
   char * drive,
   size_t driveNumberOfElements,
   char * dir,
   size_t dirNumberOfElements,
   char * fname,
   size_t nameNumberOfElements,
   char * ext,
   size_t extNumberOfElements
);
errno_t _wsplitpath_s(
   const wchar_t * path,
   wchar_t * drive,
   size_t driveNumberOfElements,
   wchar_t *dir,
   size_t dirNumberOfElements,
   wchar_t * fname,
   size_t nameNumberOfElements,
   wchar_t * ext,
   size_t extNumberOfElements
);
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _splitpath_s(
   const char *path,
   char (&drive)[drivesize],
   char (&dir)[dirsize],
   char (&fname)[fnamesize],
   char (&ext)[extsize]
); // C++ only
template <size_t drivesize, size_t dirsize, size_t fnamesize, size_t extsize>
errno_t _wsplitpath_s(
   const wchar_t *path,
   wchar_t (&drive)[drivesize],
   wchar_t (&dir)[dirsize],
   wchar_t (&fname)[fnamesize],
   wchar_t (&ext)[extsize]
); // C++ only

Parametri

path
Percorso completo.

drive
Lettera di unità, seguita da due punti (:). Se non è necessaria la lettera di unità, è possibile passare NULL per questo parametro.

driveNumberOfElements
Dimensioni del buffer drive in caratteri a byte singolo o wide. Se drive è NULL, questo valore deve essere 0.

dir
Percorso di directory, inclusa la barra finale. È possibile usare barre ( / ), barre rovesciate ( \\ ) o entrambe. È possibile passare NULL per questo parametro se non è necessario il percorso della directory.

dirNumberOfElements
Dimensioni del buffer dir in caratteri a byte singolo o wide. Se dir è NULL, questo valore deve essere 0.

fname
Nome di file di base (senza estensione). È possibile passare NULL per questo parametro se non è necessario il nome file.

nameNumberOfElements
Dimensioni del buffer fname in caratteri a byte singolo o wide. Se fname è NULL, questo valore deve essere 0.

ext
Estensione del nome di file, incluso il punto iniziale (.). È possibile passare NULL per questo parametro se non è necessaria l'estensione del nome file.

extNumberOfElements
Dimensioni del buffer ext in caratteri a byte singolo o wide. Se ext è NULL, questo valore deve essere 0.

Valore restituito

Zero se con esito positivo; un codice di errore in caso di errore.

Condizioni di errore

Condizione Valore restituito
path è NULL EINVAL
drive è NULL, driveNumberOfElements è diverso da zero EINVAL
drive non è NULL, driveNumberOfElements è zero EINVAL
dir è NULL, dirNumberOfElements è diverso da zero EINVAL
dir non è NULL, dirNumberOfElements è zero EINVAL
fname è NULL, nameNumberOfElements è diverso da zero EINVAL
fname non è NULL, nameNumberOfElements è zero EINVAL
ext è NULL, extNumberOfElements è diverso da zero EINVAL
ext non è NULL, extNumberOfElements è zero EINVAL

Se si verifica una delle condizioni precedenti, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri . Se l'esecuzione può continuare, queste funzioni impostano errno su EINVAL e restituiscono EINVAL.

Se uno qualsiasi dei buffer è troppo breve per contenere il risultato, queste funzioni cancellano tutti i buffer per svuotarli dalle stringhe, impostano errno su ERANGE e restituiscono ERANGE.

Osservazioni:

La funzione _splitpath_s suddivide un percorso nei suoi quattro componenti. _splitpath_s gestisce automaticamente gli argomenti stringa di caratteri multibyte in base alle esigenze, riconoscendo le sequenze di caratteri multibyte in base alla tabella codici multibyte attualmente in uso. _wsplitpath_s è una versione a caratteri "wide" di _splitpath_s. Gli argomenti per _wsplitpath_s sono stringhe a caratteri "wide". A parte ciò, queste funzioni si comportano in modo identico.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Mapping di routine di testo generico

TCHAR.H routine _UNICODE e _MBCS non definito _MBCS definito _UNICODE definito
_tsplitpath_s _splitpath_s _splitpath_s _wsplitpath_s

Ogni componente del percorso completo viene archiviato in un buffer separato; le costanti _MAX_DRIVEmanifesto , _MAX_DIR, _MAX_FNAMEe _MAX_EXT (definite in STDLIB.H) specificano le dimensioni massime consentite per ogni componente di file. I componenti del file più grandi delle costanti manifeste corrispondenti causano il danneggiamento dell'heap.

La tabella seguente elenca i valori delle costanti manifeste.

Nome Valore
_MAX_DRIVE 3
_MAX_DIR 256
_MAX_FNAME 256
_MAX_EXT 256

Se il percorso completo non contiene un componente , ad esempio un nome file, _splitpath_s assegna una stringa vuota al buffer corrispondente.

In C++ l'uso di queste funzioni è semplificato dagli overload dei modelli. Gli overload possono dedurre la lunghezza del buffer automaticamente, eliminando la necessità di specificare un argomento di dimensione. Per altre informazioni, vedere Proteggere gli overload dei modelli.

Le versioni della libreria di debug di queste funzioni riempiono prima di tutto il buffer con 0xFE. Per disabilitare questo comportamento, usare _CrtSetDebugFillThreshold.

Requisiti

Ciclo Intestazione obbligatoria
_splitpath_s <stdlib.h>
_wsplitpath_s <stdlib.h> oppure <wchar.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

Vedere l'esempio per _makepath_s, _wmakepath_s.

Vedi anche

Gestione dei file
_splitpath, _wsplitpath
_fullpath, _wfullpath
_getmbcp
_makepath, _wmakepath
_setmbcp