Aracılığıyla paylaş


_makepath_s, _wmakepath_s

Bileşenlerden bir yol adı oluşturur. Bu işlevler, CRT'deki _makepath_wmakepathGüvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri içeren sürümleridir.

Sözdizimi

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

Parametreler

path
Tam yol arabelleği.

sizeInWords
Arabelleğin sözcüklerle boyutu.

sizeInBytes
Arabelleğin bayt cinsinden boyutu.

drive
İstenen sürücüye karşılık gelen bir harf (A, B vb.) ve isteğe bağlı bir sondaki iki nokta üst üste içerir. _makepath_s eksikse bileşik yola otomatik olarak iki nokta üst üste ekler. boş bir dizeyse driveNULL veya bu dizeyi işaret ederse, bileşik path dizede sürücü harfi görüntülenmez.

dir
Sürücü belirteci veya gerçek dosya adı dahil değil dizinlerin yolunu içerir. Sondaki eğik çizgi isteğe bağlıdır ve tek dir bir bağımsız değişkende eğik çizgi (/) veya ters eğik çizgi (\) ya da her ikisi de kullanılabilir. Sondaki eğik çizgi (/ veya \) belirtilmezse, otomatik olarak eklenir. boş bir dizeyse dirNULL veya bu dizeyi işaret ederse, bileşik path dizeye dizin yolu eklenmez.

fname
Herhangi bir dosya adı uzantısı olmadan temel dosya adını içerir. boş bir dizeye NULL işaret ederse fname veya işaret ederse, bileşik path dizeye dosya adı eklenmez.

ext
Gerçek dosya adı uzantısını, başında nokta (.) olan veya olmayan dosya adı uzantısını içerir. _makepath_s içinde görünmüyorsa extdönemi otomatik olarak ekler. boş bir dizeyse extNULL veya bu dizeyi işaret ederse, bileşik path dizeye uzantı eklenmez.

Dönüş değeri

Başarılı olursa sıfır; hatayla ilgili bir hata kodu.

Hata koşulları

path sizeInWords / sizeInBytes İade İçeriği path
NULL herhangi bir EINVAL değiştirilmedi
herhangi bir <= 0 EINVAL değiştirilmedi

Yukarıdaki hata koşullarından herhangi biri oluşursa, bu işlevler Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırır. Yürütmenin devam etmesi için izin verilirse, errno olarak ayarlanır EINVAL ve işlevleri döndürür EINVAL. NULL, fnameve extparametreleri driveiçin izin verilir. Bu parametrelerin null işaretçiler veya boş dizeler olduğu davranış hakkında bilgi için Açıklamalar bölümüne bakın.

Açıklamalar

işlevi, _makepath_s tek tek bileşenlerden bileşik bir yol dizesi oluşturur ve sonucu içinde pathdepolar. bir path sürücü harfi, dizin yolu, dosya adı ve dosya adı uzantısı içerebilir. _wmakepath_s , öğesinin _makepath_sgeniş karakterli bir sürümüdür; için bağımsız değişkenler _wmakepath_s geniş karakterli dizelerdir. _wmakepath_s ve _makepath_s aksi takdirde aynı şekilde davran.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Genel metin yordamı eşlemeleri

Tchar.h yordamı _UNICODE ve _MBCS tanımlanmadı _MBCS Tanımlanan _UNICODE Tanımlanan
_tmakepath_s _makepath_s _makepath_s _wmakepath_s

Bağımsız değişken, path tam yolu tutacak kadar büyük boş bir arabelleğe işaret etmelidir. Bileşik path , Stdlib.h dosyasında tanımlanan sabitten _MAX_PATH büyük olmamalıdır.

yol iseNULL, Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Buna ek olarak, errno olarak EINVALayarlanır. NULL diğer tüm parametreler için değerlere izin verilir.

C++'ta bu işlevlerin kullanılması şablon aşırı yüklemeleriyle basitleştirilir; aşırı yüklemeler arabellek uzunluğunu otomatik olarak çıkarabilir (boyut bağımsız değişkeni belirtme gereksinimini ortadan kaldırır) ve eski, güvenli olmayan işlevleri yeni ve güvenli karşılıklarıyla otomatik olarak değiştirebilir. Daha fazla bilgi için bkz . Güvenli şablon aşırı yüklemeleri.

Bu işlevlerin hata ayıklama kitaplığı sürümleri önce arabelleği 0xFE ile doldurur. Bu davranışı devre dışı bırakmak için kullanın _CrtSetDebugFillThreshold.

Gereksinimler

Yordam Gerekli başlık
_makepath_s <stdlib.h>
_wmakepath_s <stdlib.h> veya <wchar.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// 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

Ayrıca bkz.

Dosya işleme
_fullpath, _wfullpath
_splitpath_s, _wsplitpath_s
_makepath, _wmakepath