strnlen
, , wcsnlen
strnlen_s
, wcsnlen_s
, _mbsnlen
, _mbsnlen_l
, , _mbstrnlen
,_mbstrnlen_l
Mendapatkan panjang string dengan menggunakan lokal saat ini atau yang telah diteruskan. Fungsi-fungsi ini adalah versi yang lebih aman dari , , wcslen
, _mbslen
_mbslen_l
, _mbstrlen
, _mbstrlen_l
.strlen
Penting
_mbsnlen
, , _mbsnlen_l
_mbstrnlen
, dan _mbstrnlen_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
size_t strnlen(
const char *str,
size_t numberOfElements
);
size_t strnlen_s(
const char *str,
size_t numberOfElements
);
size_t wcsnlen(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_s(
const wchar_t *str,
size_t numberOfElements
);
size_t _mbsnlen(
const unsigned char *str,
size_t numberOfElements
);
size_t _mbsnlen_l(
const unsigned char *str,
size_t numberOfElements,
_locale_t locale
);
size_t _mbstrnlen(
const char *str,
size_t numberOfElements
);
size_t _mbstrnlen_l(
const char *str,
size_t numberOfElements,
_locale_t locale
);
Parameter
str
Untai (karakter) null-terminated.
numberOfElements
Ukuran buffer string.
locale
Lokal untuk digunakan.
Nilai hasil
Fungsi-fungsi ini mengembalikan jumlah karakter dalam string, tidak termasuk karakter null yang dihentikan. Jika tidak ada terminator null dalam byte pertama numberOfElements
string (atau karakter lebar untuk wcsnlen
), maka numberOfElements
dikembalikan untuk menunjukkan kondisi kesalahan; string null-terminated memiliki panjang yang benar-benar kurang dari numberOfElements
.
_mbstrnlen
dan _mbstrnlen_l
kembalikan -1 jika string berisi karakter multibyte yang tidak valid.
Keterangan
Catatan
strnlen
bukan pengganti untuk strlen
; strnlen
dimaksudkan untuk digunakan hanya untuk menghitung ukuran data yang tidak tepercaya masuk dalam buffer ukuran yang diketahui—misalnya, paket jaringan. strnlen
menghitung panjang tetapi tidak berjalan melewati akhir buffer jika string tidak ditentukan. Untuk situasi lain, gunakan strlen
. (Hal yang sama berlaku untuk wcsnlen
, , _mbsnlen
dan _mbstrnlen
.)
Masing-masing fungsi ini mengembalikan jumlah karakter dalam str
, tidak termasuk karakter null yang dihentikan. Namun, strnlen
dan strnlen_s
menginterpretasikan string sebagai string karakter byte tunggal dan oleh karena itu, nilai pengembalian selalu sama dengan jumlah byte, bahkan jika string berisi karakter multibyte. wcsnlen
dan wcsnlen_s
masing-masing adalah versi strnlen
karakter lebar dari dan strnlen_s
masing-masing; argumen untuk wcsnlen
dan wcsnlen_s
adalah string karakter lebar dan jumlah karakter berada dalam unit karakter lebar. Jika tidak, wcsnlen
dan strnlen
berulah identik, seperti halnya strnlen_s
dan wcsnlen_s
.
strnlen
, wcsnlen
, dan _mbsnlen
jangan validasi parameternya. Jika str
adalah NULL
, pelanggaran akses terjadi.
strnlen_s
dan wcsnlen_s
memvalidasi parameternya. Jika str
adalah NULL
, fungsi mengembalikan 0.
_mbstrnlen
juga memvalidasi parameternya. Jika str
adalah NULL
, atau jika numberOfElements
lebih besar dari INT_MAX
, _mbstrnlen
menghasilkan pengecualian parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, _mbstrnlen
atur errno
ke EINVAL
dan kembalikan -1.
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 |
---|---|---|---|
_tcsnlen |
strnlen |
strnlen |
wcsnlen |
_tcscnlen |
strnlen |
_mbsnlen |
wcsnlen |
_tcscnlen_l |
strnlen |
_mbsnlen_l |
wcsnlen |
_mbsnlen
dan _mbstrnlen
mengembalikan jumlah karakter multibyte dalam string multibyte-character. _mbsnlen
mengenali urutan karakter multibyte sesuai dengan halaman kode multibyte yang saat ini digunakan atau sesuai dengan lokal yang diteruskan; ini tidak menguji validitas multibyte-character. _mbstrnlen
pengujian untuk validitas karakter multibyte dan mengenali urutan karakter multibyte. Jika string yang diteruskan ke _mbstrnlen
berisi karakter multibyte yang tidak valid, errno
diatur ke EILSEQ
.
Nilai output dipengaruhi oleh pengaturan LC_CTYPE
pengaturan kategori lokal. Untuk informasi selengkapnya, lihat setlocale
. Versi fungsi ini identik, kecuali yang tidak memiliki _l
akhiran menggunakan lokal saat ini untuk perilaku dependen lokal ini dan versi yang memiliki _l
akhiran, sebagai gantinya, gunakan parameter lokal yang diteruskan. Untuk informasi selengkapnya, lihat Lokal.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
strnlen , strnlen_s |
<string.h> |
wcsnlen , wcsnlen_s |
<string.h> atau <wchar.h> |
_mbsnlen , _mbsnlen_l |
<mbstring.h> |
_mbstrnlen , _mbstrnlen_l |
<stdlib.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt_strnlen.c
#include <string.h>
int main()
{
// str1 is 82 characters long. str2 is 159 characters long
char* str1 = "The length of a string is the number of characters\n"
"excluding the terminating null.";
char* str2 = "strnlen takes a maximum size. If the string is longer\n"
"than the maximum size specified, the maximum size is\n"
"returned rather than the actual size of the string.";
size_t len;
size_t maxsize = 100;
len = strnlen(str1, maxsize);
printf("%s\n Length: %d \n\n", str1, len);
len = strnlen(str2, maxsize);
printf("%s\n Length: %d \n", str2, len);
}
The length of a string is the number of characters
excluding the terminating null.
Length: 82
strnlen takes a maximum size. If the string is longer
than the maximum size specified, the maximum size is
returned rather than the actual size of the string.
Length: 100
Lihat juga
Manipulasi string
Lokal
Interpretasi urutan karakter multibyte
setlocale
, _wsetlocale
strncat
, , _strncat_l
wcsncat
, _wcsncat_l
, , _mbsncat
,_mbsncat_l
strncmp
, , wcsncmp
_mbsncmp
,_mbsncmp_l
strcoll
Fungsi
strncpy_s
, , _strncpy_s_l
wcsncpy_s
, _wcsncpy_s_l
, , _mbsncpy_s
,_mbsncpy_s_l
strrchr
, , wcsrchr
_mbsrchr
,_mbsrchr_l
_strset
, , _strset_l
_wcsset
, _wcsset_l
, , _mbsset
,_mbsset_l
strspn
, , wcsspn
_mbsspn
,_mbsspn_l