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
, wcsnlen
wcsnlen_s
, , _mbsnlen
, _mbsnlen_l
, _mbstrnlen
_mbstrnlen_l
Önemli
_mbslen
, _mbslen_l
, _mbstrlen
ve _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 str
karakter sayısını döndürür. Dize geçersiz bir çok baytlı karakter içeriyorsa döndüren ((size_t)(-1))
ve _mbstrlen_l
dışı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 olağan |
_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 EILSEQ
ayarlarerrno
.
Çı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