_splitpath_s
, _wsplitpath_s
Memecah nama jalur menjadi komponen. Fungsi-fungsi ini adalah versi _splitpath
, _wsplitpath
dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
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
Parameter
path
Jalur lengkap.
drive
Huruf kandar, diikuti dengan titik dua (:
). Anda dapat meneruskan NULL
parameter ini jika Anda tidak memerlukan huruf drive.
driveNumberOfElements
Ukuran drive
buffer dalam karakter byte tunggal atau lebar. Jika drive
adalah NULL
, nilai ini harus 0.
dir
Jalur direktori, termasuk garis miring berikutnya. Garis miring ( /
), garis miring terbalik ( \\
), atau keduanya dapat digunakan. Anda dapat meneruskan NULL
parameter ini jika Anda tidak memerlukan jalur direktori.
dirNumberOfElements
Ukuran dir
buffer dalam karakter byte tunggal atau lebar. Jika dir
adalah NULL
, nilai ini harus 0.
fname
Nama file dasar (tanpa ekstensi). Anda dapat meneruskan NULL
parameter ini jika Anda tidak memerlukan nama file.
nameNumberOfElements
Ukuran fname
buffer dalam karakter byte tunggal atau lebar. Jika fname
adalah NULL
, nilai ini harus 0.
ext
Ekstensi nama file, termasuk periode awal (.
). Anda dapat meneruskan NULL
parameter ini jika Anda tidak memerlukan ekstensi nama file.
extNumberOfElements
Ukuran ext
buffer dalam karakter byte tunggal atau lebar. Jika ext
adalah NULL
, nilai ini harus 0.
Nilai hasil
Nol jika berhasil; kode kesalahan pada kegagalan.
Kondisi kesalahan
Kondisi | Nilai hasil |
---|---|
path is NULL |
EINVAL |
drive adalah NULL , driveNumberOfElements bukan nol |
EINVAL |
drive non-NULL , driveNumberOfElements adalah nol |
EINVAL |
dir adalah NULL , dirNumberOfElements bukan nol |
EINVAL |
dir non-NULL , dirNumberOfElements adalah nol |
EINVAL |
fname adalah NULL , nameNumberOfElements bukan nol |
EINVAL |
fname non-NULL , nameNumberOfElements adalah nol |
EINVAL |
ext adalah NULL , extNumberOfElements bukan nol |
EINVAL |
ext non-NULL , extNumberOfElements adalah nol |
EINVAL |
Jika salah satu kondisi di atas terjadi, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter . Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini diatur errno
ke EINVAL
dan mengembalikan EINVAL
.
Jika salah satu buffer terlalu pendek untuk menahan hasilnya, fungsi-fungsi ini menghapus semua buffer ke string kosong, diatur errno
ke ERANGE
, dan mengembalikan ERANGE
.
Keterangan
Fungsi ini _splitpath_s
memecah jalur menjadi empat komponennya. _splitpath_s
secara otomatis menangani argumen string multibyte-character yang sesuai, mengenali urutan karakter multibyte sesuai dengan halaman kode multibyte yang saat ini digunakan. _wsplitpath_s
adalah versi karakter luas dari _splitpath_s
; argumen untuk _wsplitpath_s
adalah string karakter lebar. Fungsi-fungsi ini berulah secara identik jika tidak
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Pemetaan rutin teks generik
TCHAR.H Rutin |
_UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_tsplitpath_s |
_splitpath_s |
_splitpath_s |
_wsplitpath_s |
Setiap komponen jalur lengkap disimpan dalam buffer terpisah; konstanta _MAX_DRIVE
manifes , _MAX_DIR
, _MAX_FNAME
, dan _MAX_EXT
(didefinisikan dalam STDLIB.H
) menentukan ukuran maksimum yang diizinkan untuk setiap komponen file. Komponen file lebih besar dari konstanta manifes yang sesuai menyebabkan kerusakan tumpukan.
Tabel berikut mencantumkan nilai konstanta manifes.
Nama | Nilai |
---|---|
_MAX_DRIVE |
3 |
_MAX_DIR |
256 |
_MAX_FNAME |
256 |
_MAX_EXT |
256 |
Jika jalur lengkap tidak berisi komponen (misalnya, nama file), _splitpath_s
menetapkan string kosong ke buffer yang sesuai.
Di C++, menggunakan fungsi-fungsi ini disederhanakan oleh kelebihan beban templat; kelebihan beban dapat menyimpulkan panjang buffer secara otomatis, menghilangkan kebutuhan untuk menentukan argumen ukuran. Untuk informasi selengkapnya, lihat Mengamankan kelebihan beban templat.
Versi pustaka debug dari fungsi-fungsi ini terlebih dahulu mengisi buffer dengan 0xFE. Untuk menonaktifkan perilaku ini, gunakan _CrtSetDebugFillThreshold
.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
_splitpath_s |
<stdlib.h> |
_wsplitpath_s |
<stdlib.h> atau <wchar.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
Lihat contoh untuk _makepath_s
, _wmakepath_s
.
Lihat juga
Penanganan file
_splitpath
, _wsplitpath
_fullpath
, _wfullpath
_getmbcp
_makepath
, _wmakepath
_setmbcp