Aracılığıyla paylaş


strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l

Geçerli yerel ayarı veya belirtilen yerel ayarı kullanarak dizenin uzunluğunu alır. Bu işlevlerin daha güvenli sürümleri mevcuttur; bkz. strnlen, strnlen_s, wcsnlenwcsnlen_s, , _mbsnlen, _mbsnlen_l, _mbstrnlen_mbstrnlen_l

Önemli

_mbslen, _mbslen_l, _mbstrlenve _mbstrlen_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

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
);

Parametreler

str
Null ile sonlandırılan dize.

locale
Kullanılacak yerel ayar.

Dönüş değeri

Bu işlevlerin her biri, terminal null hariç, içindeki strkarakter sayısını döndürür. Dize geçersiz bir çok baytlı karakter içeriyorsa döndüren ((size_t)(-1)) ve _mbstrlen_ldışında bir hata belirtmek için _mbstrlen hiçbir dönüş değeri ayrılmaz.

Açıklamalar

strlen dizeyi tek baytlık bir karakter dizesi olarak yorumlar, böylece dize çok baytlı karakterler içerse bile dönüş değeri her zaman bayt sayısına eşit olur. wcslen geniş karakterli bir sürümüdür strlen; bağımsız değişkeni wcslen geniş karakterli bir dizedir ve karakter sayısı geniş (iki bayt) karakterdir. wcslen ve strlen aksi takdirde aynı şekilde davran.

Güvenlik Notu Bu işlevler, arabellek taşması sorununun neden olduğu olası bir tehdit oluşturur. Arabellek taşması sorunları sık karşılaşılan bir sistem saldırısı yöntemidir ve bu da ayrıcalıkların gereksiz bir şekilde yükseltilmesine neden olur. Daha fazla bilgi için bkz . Arabellek taşmalarından kaçınma.

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

_mbslen ve _mbslen_l çok baytlı karakter dizesindeki çok baytlı karakter sayısını döndürür, ancak çok baytlı karakter geçerliliğini sınamaz. _mbstrlen ve _mbstrlen_l çok baytlı karakter geçerliliğini test eder ve çok baytlı karakter dizilerini tanır. Dizeye _mbstrlen geçirildiyse veya _mbstrlen_l kod sayfası için geçersiz bir çok baytlı karakter içeriyorsa, işlev -1 döndürür ve olarak EILSEQayarlarerrno.

Çıkış değeri, yerel ayarın LC_CTYPE kategori ayarının ayarından etkilenir. Daha fazla bilgi için bkz. setlocale. Bu işlevlerin son eki olmayan _l sürümleri, bu yerel ayara bağımlı davranış için geçerli yerel ayarı kullanır; son ekine _l sahip sürümler, bunun yerine geçirilen yerel ayar parametresini kullanmaları dışında aynıdır. Daha fazla bilgi için bkz . Yerel Ayar.

Gereksinimler

Yordam Gerekli başlık
strlen <string.h>
wcslen <string.h> veya <wchar.h>
_mbslen, _mbslen_l <mbstring.h>
_mbstrlen, _mbstrlen_l <stdlib.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

// 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

Ayrıca bkz.

Dize işleme
Çok baytlı karakter dizilerinin yorumlanması
Yerel ayar
setlocale, _wsetlocale
strcat, wcscat, _mbscat
strcmp, wcscmp, _mbscmp
strcoll işlevleri
strcpy, wcscpy, _mbscpy
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l
_strset, _strset_l, _wcsset, _wcsset_l, _mbsset, _mbsset_l
strspn, wcsspn, _mbsspn, _mbsspn_l