Bagikan melalui


_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_DRIVEmanifes , _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