strcpy_s
, wcscpy_s
, _mbscpy_s
, _mbscpy_s_l
Bir dizeyi kopyalar. bu , _mbscpy
wcscpy
sürümlerininstrcpy
, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri vardır.
Önemli
_mbscpy_s
ve _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_MAX
bü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 src
içeriği tarafından dest
belirtilen 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_s
ve _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 EINVAL
errno
ve hedef dize çok küçük olduğunda döndürülerek ERANGE
olarak ayarlanır errno
ERANGE
.
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 olağan |
_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