Bagikan melalui


strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l

Mendapatkan panjang string, dengan menggunakan lokal saat ini atau lokal tertentu. Versi yang lebih aman dari fungsi-fungsi ini tersedia; lihat strnlen, , wcsnlenstrnlen_s, wcsnlen_s, _mbsnlen, _mbsnlen_l, , _mbstrnlen,_mbstrnlen_l

Penting

_mbslen, , _mbslen_l_mbstrlen, dan _mbstrlen_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 strlen(
   const char *str
);
size_t wcslen(
   const wchar_t *str
);
size_t _mbslen(
   const unsigned char *str
);
size_t _mbslen_l(
   const unsigned char *str,
   _locale_t locale
);
size_t _mbstrlen(
   const char *str
);
size_t _mbstrlen_l(
   const char *str,
   _locale_t locale
);

Parameter

str
Untai (karakter) null-terminated.

locale
Lokal untuk digunakan.

Nilai hasil

Masing-masing fungsi ini mengembalikan jumlah karakter dalam str, tidak termasuk terminal null. Tidak ada nilai pengembalian yang dicadangkan untuk menunjukkan kesalahan, kecuali dan _mbstrlen_mbstrlen_l, yang mengembalikan ((size_t)(-1)) jika string berisi karakter multibyte yang tidak valid.

Keterangan

strlen menginterpretasikan string sebagai string karakter byte tunggal, sehingga nilai pengembaliannya selalu sama dengan jumlah byte, bahkan jika string berisi karakter multibyte. wcslen adalah versi strlenkarakter lebar ; argumen dari wcslen adalah string karakter lebar dan jumlah karakter dalam karakter lebar (dua byte). wcslen dan strlen berulah secara identik jika tidak.

Catatan Keamanan Fungsi-fungsi ini menimbulkan potensi ancaman yang dibawa oleh masalah buffer overrun. Masalah buffer overrun adalah metode serangan sistem yang sering, yang mengakibatkan peningkatan hak istimewa yang tidak beralasan. Untuk informasi selengkapnya, lihat Menghindari overruns buffer.

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
_tcslen strlen strlen wcslen
_tcsclen strlen _mbslen wcslen
_tcsclen_l strlen _mbslen_l wcslen

_mbslen dan _mbslen_l mengembalikan jumlah karakter multibyte dalam string multibyte-character tetapi tidak menguji validitas karakter multibyte. _mbstrlen dan _mbstrlen_l uji validitas karakter multibyte dan kenali urutan karakter multibyte. Jika string diteruskan ke _mbstrlen atau _mbstrlen_l berisi karakter multibyte yang tidak valid untuk halaman kode, fungsi mengembalikan -1 dan diatur errno ke EILSEQ.

Nilai output dipengaruhi oleh pengaturan LC_CTYPE pengaturan kategori lokal. Untuk informasi selengkapnya, lihat setlocale . Versi fungsi-fungsi ini tanpa _l akhiran menggunakan lokal saat ini untuk perilaku tergantung lokal ini; versi dengan _l akhiran identik kecuali bahwa mereka menggunakan parameter lokal yang diteruskan sebagai gantinya. Untuk informasi selengkapnya, lihat Lokal.

Persyaratan

Rutin Header yang diperlukan
strlen <string.h>
wcslen <string.h> atau <wchar.h>
_mbslen, _mbslen_l <mbstring.h>
_mbstrlen, _mbstrlen_l <stdlib.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// crt_strlen.c
// Determine the length of a string. For the multi-byte character
// example to work correctly, the Japanese language support for
// non-Unicode programs must be enabled by the operating system.

#include <string.h>
#include <locale.h>

int main()
{
   char* str1 = "Count.";
   wchar_t* wstr1 = L"Count.";
   char * mbstr1;
   char * locale_string;

   // strlen gives the length of single-byte character string
   printf("Length of '%s' : %d\n", str1, strlen(str1) );

   // wcslen gives the length of a wide character string
   wprintf(L"Length of '%s' : %d\n", wstr1, wcslen(wstr1) );

   // A multibyte string: [A] [B] [C] [katakana A] [D] [\0]
   // in Code Page 932. For this example to work correctly,
   // the Japanese language support must be enabled by the
   // operating system.
   mbstr1 = "ABC" "\x83\x40" "D";

   locale_string = setlocale(LC_CTYPE, "Japanese_Japan");

   if (locale_string == NULL)
   {
      printf("Japanese locale not enabled. Exiting.\n");
      exit(1);
   }
   else
   {
      printf("Locale set to %s\n", locale_string);
   }

   // _mbslen will recognize the Japanese multibyte character if the
   // current locale used by the operating system is Japanese
   printf("Length of '%s' : %d\n", mbstr1, _mbslen(mbstr1) );

   // _mbstrlen will recognize the Japanese multibyte character
   // since the CRT locale is set to Japanese even if the OS locale
   // isnot.
   printf("Length of '%s' : %d\n", mbstr1, _mbstrlen(mbstr1) );
   printf("Bytes in '%s' : %d\n", mbstr1, strlen(mbstr1) );

}
Length of 'Count.' : 6
Length of 'Count.' : 6
Length of 'ABCァD' : 5
Length of 'ABCァD' : 5
Bytes in 'ABCァD' : 6

Baca juga

Manipulasi string
Interpretasi urutan karakter multibyte
Lokal
setlocale, _wsetlocale
strcat, wcscat, _mbscat
strcmp, wcscmp, _mbscmp
strcoll Fungsi
strcpy, wcscpy, _mbscpy
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l
_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l
strspn, wcsspn, _mbsspn, _mbsspn_l