_makepath_s
, _wmakepath_s
Membuat nama jalur dari komponen. Fungsi-fungsi ini adalah versi _makepath
, _wmakepath
dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
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
Parameter
path
Buffer jalur lengkap.
sizeInWords
Ukuran buffer dengan kata-kata.
sizeInBytes
Ukuran buffer dalam byte.
drive
Berisi huruf (A, B, dan sebagainya) yang sesuai dengan drive yang diinginkan dan titik dua berikutnya opsional. _makepath_s
menyisipkan titik dua secara otomatis di jalur komposit jika hilang. Jika drive
adalah NULL
atau menunjuk ke string kosong, tidak ada huruf drive yang muncul dalam string komposit path
.
dir
Berisi jalur direktori, tidak termasuk pendesain drive atau nama file aktual. Garis miring berikutnya bersifat opsional, dan garis miring (/) atau garis miring terbalik (\) atau keduanya mungkin digunakan dalam satu dir
argumen. Jika tidak ada garis miring berikutnya (/ atau \) yang ditentukan, garis miring akan disisipkan secara otomatis. Jika dir
adalah NULL
atau menunjuk ke string kosong, tidak ada jalur direktori yang dimasukkan dalam string komposit path
.
fname
Berisi nama file dasar tanpa ekstensi nama file. Jika fname
adalah NULL
atau menunjuk ke string kosong, tidak ada nama file yang dimasukkan dalam string komposit path
.
ext
Berisi ekstensi nama file aktual, dengan atau tanpa periode awal (.). _makepath_s
menyisipkan periode secara otomatis jika tidak muncul di ext
. Jika ext
adalah NULL
atau menunjuk ke string kosong, tidak ada ekstensi yang dimasukkan dalam string komposit path
.
Nilai hasil
Nol jika berhasil; kode kesalahan pada kegagalan.
Kondisi kesalahan
path |
sizeInWords / sizeInBytes |
Tampilkan | Isi dari path |
---|---|---|---|
NULL |
any | EINVAL |
tidak dimodifikasi |
any | <=0 | EINVAL |
tidak dimodifikasi |
Jika salah satu kondisi kesalahan di atas terjadi, fungsi-fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, errno
diatur ke EINVAL
dan fungsi mengembalikan EINVAL
. NULL
diizinkan untuk parameter drive
, fname
, dan ext
. Untuk informasi tentang perilaku saat parameter ini adalah penunjuk null atau string kosong, lihat bagian Keterangan.
Keterangan
Fungsi ini _makepath_s
membuat string jalur komposit dari komponen individual, menyimpan hasilnya di path
. mungkin path
menyertakan huruf kandar, jalur direktori, nama file, dan ekstensi nama file. _wmakepath_s
adalah versi karakter luas dari _makepath_s
; argumen untuk _wmakepath_s
adalah string karakter lebar. _wmakepath_s
dan _makepath_s
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
Rutinitas Tchar.h | _UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
Argumen path
harus menunjuk ke buffer kosong yang cukup besar untuk menahan jalur lengkap. Komposit path
tidak boleh lebih besar dari _MAX_PATH
konstanta, yang didefinisikan dalam Stdlib.h.
Jika jalur adalah NULL
, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Selain itu, errno
diatur ke EINVAL
. NULL
nilai diperbolehkan untuk semua parameter lainnya.
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) dan mereka dapat secara otomatis mengganti fungsi lama yang tidak aman dengan rekan-rekan yang lebih baru dan aman. 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 |
---|---|
_makepath_s |
<stdlib.h> |
_wmakepath_s |
<stdlib.h> atau <wchar.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// 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
Lihat juga
Penanganan file
_fullpath
, _wfullpath
_splitpath_s
, _wsplitpath_s
_makepath
, _wmakepath