Aracılığıyla paylaş


strcpy_s, wcscpy_s, _mbscpy_s, _mbscpy_s_l

Bir dizeyi kopyalar. bu , _mbscpywcscpysürümlerininstrcpy, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri vardır.

Önemli

_mbscpy_sve _mbscpy_s_l Windows Çalışma Zamanı yürütülen uygulamalarda kullanılamaz. Daha fazla bilgi için bkz. Evrensel Windows Platformu uygulamalarında desteklenmeyen CRT işlevleri.

Sözdizimi

errno_t strcpy_s(
   char *dest,
   rsize_t dest_size,
   const char *src
);
errno_t wcscpy_s(
   wchar_t *dest,
   rsize_t dest_size,
   const wchar_t *src
);
errno_t _mbscpy_s(
   unsigned char *dest,
   rsize_t dest_size,
   const unsigned char *src
);
errno_t _mbscpy_s_l(
   unsigned char *dest,
   rsize_t dest_size,
   const unsigned char *src,
   _locale_t locale
);
// Template functions are C++ only:
template <size_t size>
errno_t strcpy_s(
   char (&dest)[size],
   const char *src
); // C++ only
template <size_t size>
errno_t wcscpy_s(
   wchar_t (&dest)[size],
   const wchar_t *src
); // C++ only
template <size_t size>
errno_t _mbscpy_s(
   unsigned char (&dest)[size],
   const unsigned char *src
); // C++ only
template <size_t size>
errno_t _mbscpy_s_l(
   unsigned char (&dest)[size],
   const unsigned char *src,
   _locale_t locale
); // C++ only

Parametreler

dest
Hedef dize arabelleğinin konumu.

dest_size
Hedef dize arabelleğinin char boyutu, dar ve çok baytlı işlevler için birimler ve wchar_t geniş işlevler için birimler. Bu değer sıfırdan büyük olmalı ve değerinden RSIZE_MAXbüyük olmamalıdır. Bu boyutun dizeyi izleyen sonlandırıcıyı NULL hesapdiğinden emin olun.

src
Null olarak sonlandırılan kaynak dize arabelleği.

locale
Kullanılacak yerel ayar.

Dönüş değeri

Başarılı olursa sıfır; aksi takdirde, bir hata.

Hata koşulları

dest dest_size src Dönüş değeri İçeriği dest
NULL herhangi bir herhangi bir EINVAL değiştirilmedi
herhangi bir herhangi bir NULL EINVAL dest[0] 0 olarak ayarlayın
herhangi bir 0 veya çok küçük herhangi bir ERANGE dest[0] 0 olarak ayarlayın

Açıklamalar

İşlev, strcpy_s sonlandırıcı null karakter de dahil olmak üzere adresindeki srciçeriği tarafından destbelirtilen konuma kopyalar. Hedef dize, kaynak dizeyi ve sonlandırıcı null karakterini barındıracak kadar büyük olmalıdır. Kaynak ve hedef dizeler çakışıyorsa, öğesinin davranışı strcpy_s tanımlanmamıştır.

wcscpy_s , öğesinin geniş karakterli sürümüdür strcpy_sve _mbscpy_s çok baytlı karakter sürümüdür. bağımsız değişkenleri wcscpy_s geniş karakterli dizelerdir. ve _mbscpy_s_l bağımsız değişkenleri _mbscpy_s çok baytlı karakter dizeleridir. Bu işlevler aynı şekilde davranır. _mbscpy_s_l_mbscpy_s, geçerli yerel ayar yerine geçirilen yerel ayar parametresini kullanması dışında aynıdır. Daha fazla bilgi için bkz. locale.

Veya src null bir işaretçiyse dest veya hedef dize boyutu dest_size çok küçükse, Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, bu işlevler döndürülerek EINVAL ne zaman dest veya src null işaretçisi olarak ayarlanır EINVALerrno ve hedef dize çok küçük olduğunda döndürülerek ERANGE olarak ayarlanır errnoERANGE.

Yürütme başarılı olduğunda hedef dize her zaman null olarak sonlandırılır.

C++ dilinde bu işlevlerin kullanımı, arabellek uzunluğunu otomatik olarak çıkarabilen şablon aşırı yüklemeleriyle basitleştirilir, böylece boyut bağımsız değişkeni belirtmeniz gerekmez. Ayrıca, eski, daha az güvenli işlevleri otomatik olarak daha yeni ve daha güvenli karşılıklarla değiştirebilirler. 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.

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 Rutin _UNICODE ve _MBCS tanımlanmadı _MBCS Tanımlanan _UNICODE Tanımlanan
_tcscpy_s strcpy_s _mbscpy_s wcscpy_s

Gereksinimler

Yordam Gerekli başlık
strcpy_s <string.h>
wcscpy_s <string.h> veya <wchar.h>
_mbscpy_s <mbstring.h>

Bu işlevler Microsoft'a özeldir. Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

Üretim kalite kodundan farklı olarak, bu örnek hataları denetlemeden güvenli dize işlevlerini çağırır:

// crt_strcpy_s.c
// Compile by using: cl /W4 crt_strcpy_s.c
// This program uses strcpy_s and strcat_s
// to build a phrase.

#include <string.h>     // for strcpy_s, strcat_s
#include <stdlib.h>     // for _countof
#include <stdio.h>      // for printf
#include <errno.h>      // for return values

int main(void)
{
    char stringBuffer[80];

    strcpy_s(stringBuffer, _countof(stringBuffer), "Hello world from ");
    strcat_s(stringBuffer, _countof(stringBuffer), "strcpy_s ");
    strcat_s(stringBuffer, _countof(stringBuffer), "and ");
    strcat_s(stringBuffer, _countof(stringBuffer), "strcat_s!");

    printf("stringBuffer = %s\n", stringBuffer);
}
stringBuffer = Hello world from strcpy_s and strcat_s!

C++ kodu oluştururken şablon sürümlerini kullanmak daha kolay olabilir.

// crt_wcscpy_s.cpp
// Compile by using: cl /EHsc /W4 crt_wcscpy_s.cpp
// This program uses wcscpy_s and wcscat_s
// to build a phrase.

#include <cstring>  // for wcscpy_s, wcscat_s
#include <cstdlib>  // for _countof
#include <iostream> // for cout, includes <cstdlib>, <cstring>
#include <errno.h>  // for return values

int main(void)
{
    wchar_t stringBuffer[80];
    // using template versions of wcscpy_s and wcscat_s:
    wcscpy_s(stringBuffer, L"Hello world from ");
    wcscat_s(stringBuffer, L"wcscpy_s ");
    wcscat_s(stringBuffer, L"and ");
    // of course we can supply the size explicitly if we want to:
    wcscat_s(stringBuffer, _countof(stringBuffer), L"wcscat_s!");

    std::wcout << L"stringBuffer = " << stringBuffer << std::endl;
}
stringBuffer = Hello world from wcscpy_s and wcscat_s!

Ayrıca bkz.

Dize işleme
strcat, wcscat, _mbscat, _mbscat_l
strcmp, wcscmp, _mbscmp, _mbscmp_l
strncat_s, _strncat_s_l, wcsncat_s, _wcsncat_s_l, _mbsncat_s, _mbsncat_s_l
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l
_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l
strspn, wcsspn, _mbsspn, _mbsspn_l