_makepath_s
, _wmakepath_s
Crea un nome di percorso da componenti. Queste funzioni sono versioni di , _wmakepath
con miglioramenti della_makepath
sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
errno_t _makepath_s(
char *path,
size_t sizeInBytes,
const char *drive,
const char *dir,
const char *fname,
const char *ext
);
errno_t _wmakepath_s(
wchar_t *path,
size_t sizeInWords,
const wchar_t *drive,
const wchar_t *dir,
const wchar_t *fname,
const wchar_t *ext
);
template <size_t size>
errno_t _makepath_s(
char (&path)[size],
const char *drive,
const char *dir,
const char *fname,
const char *ext
); // C++ only
template <size_t size>
errno_t _wmakepath_s(
wchar_t (&path)[size],
const wchar_t *drive,
const wchar_t *dir,
const wchar_t *fname,
const wchar_t *ext
); // C++ only
Parametri
path
Buffer del percorso completo.
sizeInWords
Dimensione del buffer in forma di testo.
sizeInBytes
Dimensione del buffer in byte.
drive
Contiene una lettera (A, B e così via) corrispondente all'unità desiderata e i due punti finali opzionali. _makepath_s
inserisce automaticamente i due punti nel percorso composito, se mancante. Se drive
è NULL
o punta a una stringa vuota, nessuna lettera di unità viene visualizzata nella stringa path
composita.
dir
Contiene il percorso delle directory, escluso il designatore di unità o il nome del file effettivo. La barra finale è facoltativa e una barra (/) o una barra rovesciata (\) o entrambi possono essere usati in un singolo dir
argomento. Se non viene specificata alcuna barra finale (/ o \), viene inserita automaticamente. Se dir
è NULL
o punta a una stringa vuota, nessun percorso di directory viene inserito nella stringa path
composita.
fname
Contiene il nome del file di base senza alcuna estensione di nome file. Se fname
è NULL
o punta a una stringa vuota, nessun nome file viene inserito nella stringa path
composita.
ext
Contiene l'estensione di nome file effettiva, con o senza un punto iniziale (.). _makepath_s
inserisce automaticamente il punto se non viene visualizzato in ext
. Se ext
è NULL
o punta a una stringa vuota, nessuna estensione viene inserita nella stringa path
composita.
Valore restituito
Zero se con esito positivo; un codice di errore in caso di errore.
Condizioni di errore
path |
sizeInWords / sizeInBytes |
Restituzione | Contenuto di path |
---|---|---|---|
NULL |
qualsiasi | EINVAL |
non modificato |
qualsiasi | <=0 | EINVAL |
non modificato |
Se si verifica una delle condizioni di errore precedenti, queste funzioni richiamano il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, errno
viene impostato su EINVAL
e le funzioni restituiscono EINVAL
. NULL
è consentito per i parametri drive
, fname
e ext
. Per informazioni sul comportamento di questi parametri quando sono puntatori null o stringhe vuote, vedere la sezione Osservazioni.
Osservazioni:
La funzione _makepath_s
crea una stringa di percorso composita da singoli componenti, archiviando il risultato in path
. path
potrebbe includere una lettera di unità, un percorso di directory, un nome file e un'estensione del nome file. _wmakepath_s
è una versione a caratteri "wide" di _makepath_s
. Gli argomenti per _wmakepath_s
sono stringhe a caratteri "wide". In caso contrario,_wmakepath_s
e _makepath_s
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
Routine Tchar.h | _UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
L'argomento path
deve puntare a un buffer vuoto sufficientemente grande da contenere il percorso completo. Il path
composito non deve essere maggiore della costante _MAX_PATH
, definita in Stdlib.h.
Se path è NULL
, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Inoltre, errno
è impostato su EINVAL
. I valori NULL
sono consentiti per tutti gli altri parametri.
In C++ l'utilizzo 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) e possono sostituire automaticamente le funzioni precedenti e non sicure con le controparti più recenti e sicure. 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 |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> o <wchar.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// crt_makepath_s.c
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
errno_t err;
err = _makepath_s( path_buffer, _MAX_PATH, "c", "\\sample\\crt\\",
"crt_makepath_s", "c" );
if (err != 0)
{
printf("Error creating path. Error code %d.\n", err);
exit(1);
}
printf( "Path created with _makepath_s: %s\n\n", path_buffer );
err = _splitpath_s( path_buffer, drive, _MAX_DRIVE, dir, _MAX_DIR, fname,
_MAX_FNAME, ext, _MAX_EXT );
if (err != 0)
{
printf("Error splitting the path. Error code %d.\n", err);
exit(1);
}
printf( "Path extracted with _splitpath_s:\n" );
printf( " Drive: %s\n", drive );
printf( " Dir: %s\n", dir );
printf( " Filename: %s\n", fname );
printf( " Ext: %s\n", ext );
}
Path created with _makepath_s: c:\sample\crt\crt_makepath_s.c
Path extracted with _splitpath_s:
Drive: c:
Dir: \sample\crt\
Filename: crt_makepath_s
Ext: .c
Vedi anche
Gestione dei file
_fullpath
, _wfullpath
_splitpath_s
, _wsplitpath_s
_makepath
, _wmakepath