strcpy_s
, , wcscpy_s
_mbscpy_s
,_mbscpy_s_l
Menyalin string. Versi strcpy
, , _mbscpy
wcscpy
ini memiliki peningkatan keamanan, seperti yang dijelaskan dalam Fitur keamanan di CRT.
Penting
_mbscpy_s
dan _mbscpy_s_l
tidak dapat digunakan dalam aplikasi yang dijalankan di Windows Runtime. Untuk informasi selengkapnya, lihat Fungsi CRT yang tidak didukung di aplikasi Platform Windows Universal.
Sintaks
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
Parameter
dest
Lokasi buffer string tujuan.
dest_size
Ukuran buffer string tujuan dalam char
unit untuk fungsi sempit dan multi-byte, dan wchar_t
unit untuk fungsi yang luas. Nilai ini harus lebih besar dari nol dan tidak lebih besar dari RSIZE_MAX
. Pastikan ukuran ini menyumbang penghentian NULL
setelah string.
src
Buffer string sumber yang dihentikan null.
locale
Lokal untuk digunakan.
Nilai hasil
Nol jika berhasil; jika tidak, kesalahan.
Kondisi kesalahan
dest |
dest_size |
src |
Nilai hasil | Isi dari dest |
---|---|---|---|---|
NULL |
any | any | EINVAL |
tidak dimodifikasi |
any | any | NULL |
EINVAL |
dest[0] atur ke 0 |
any | 0, atau terlalu kecil | any | ERANGE |
dest[0] atur ke 0 |
Keterangan
Fungsi strcpy_s
menyalin konten dalam alamat src
, termasuk mengakhiri karakter null, ke lokasi yang ditentukan oleh dest
. String tujuan harus cukup besar untuk menahan string sumber dan karakter null yang berakhir. Perilaku strcpy_s
tidak terdefinisi jika string sumber dan tujuan tumpang tindih.
wcscpy_s
adalah versi karakter luas dari strcpy_s
, dan _mbscpy_s
merupakan versi multibyte-character. Argumen adalah wcscpy_s
string karakter lebar. Argumen dan _mbscpy_s
_mbscpy_s_l
adalah string multibyte-character. Fungsi-fungsi ini berulah secara identik jika tidak. _mbscpy_s_l
identik dengan _mbscpy_s
kecuali bahwa ia menggunakan parameter lokal yang diteruskan alih-alih lokal saat ini. Untuk informasi selengkapnya, lihat locale
.
Jika dest
atau src
adalah penunjuk null, atau jika ukuran dest_size
string tujuan terlalu kecil, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi-fungsi ini kembali EINVAL
dan diatur errno
ke EINVAL
kapan dest
atau src
adalah penunjuk null, dan mereka kembali ERANGE
dan diatur errno
ke ERANGE
ketika string tujuan terlalu kecil.
Setelah eksekusi berhasil, string tujuan selalu dihentikan null.
Di C++, penggunaan fungsi-fungsi ini disederhanakan oleh kelebihan beban templat yang dapat menyimpulkan panjang buffer secara otomatis, sehingga Anda tidak perlu menentukan argumen ukuran. Dan, mereka dapat secara otomatis mengganti fungsi yang lebih lama dan kurang aman dengan rekan-rekan yang lebih baru dan lebih 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
.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Pemetaan rutin teks generik
TCHAR.H Rutin |
_UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
---|---|---|---|
_tcscpy_s |
strcpy_s |
_mbscpy_s |
wcscpy_s |
Persyaratan
Rutin | Header yang diperlukan |
---|---|
strcpy_s |
<string.h> |
wcscpy_s |
<string.h> atau <wchar.h> |
_mbscpy_s |
<mbstring.h> |
Fungsi-fungsi ini khusus Microsoft. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
Tidak seperti kode kualitas produksi, sampel ini memanggil fungsi string aman tanpa memeriksa kesalahan:
// 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!
Saat Anda membuat kode C++, versi templat mungkin lebih mudah digunakan.
// 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!
Lihat juga
Manipulasi string
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