Bagikan melalui


_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