strlen, strlen_l, wcslen, wcslen_l, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l
Geçerli yerel veya belirtilen yerel kullanarak bir dizenin uzunluğunu alır.Bu işlevler daha güvenli sürümlerini kullanılabilir; bakınstrnlen, strnlen_s, strnlen_l, wcsnlen, wcsnlen_s, wcsnlen_l, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l
Önemli |
---|
_mbslen, _mbslen_l, _mbstrlen, ve _mbstrlen_l Windows çalışma zamanı yürütme uygulamalarda kullanılamaz.Daha fazla bilgi için /ZW ile desteklenmiyor CRT işlevleri. |
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
Sonlandırılmış dize.locale
Kullanılacak yerel ayar.
Dönüş Değeri
Bu işlevlerin her karakter sayısını döndürür str, terminal hariç NULL.Dönüş değeri yok dışında bir hata olduğunu belirtmek için ayrılmıştır _mbstrlen ve _mbstrlen_l, hangi return ((size_t)(-1)) dize çoklu bayt geçersiz bir karakter içeriyorsa.
Notlar
strlençoklu bayt karakter dizesini içeren olsa bile dönüş değerini her zaman için bayt cinsinden sayısına eşit olacak şekilde bir dizeyi bir tek bayt karakter dizisi olarak yorumlar.wcslengeniş karakter sürümüdür strlen; bağımsız değişkeni wcslen geniş karakter dizesi ve wide (iki bayt) karakterdir karakter sayısı.Aksi takdirde, wcslen ve strlen aynı şekilde davranır.
Güvenlik Notu bu işlevler taşması sorundan duruma olası bir tehdit tabi.Taşması sorunlar unwarranted bir ayrıcalık içinde kaynaklanan sistem saldırı, sık kullanılan bir yöntemdir.Daha fazla bilgi için, bkz. Arabellek Taşmalarını Önleme.
Genel Metin Yordam Eşleşmeleri
TCHAR.H yordamı |
_UNICODE & _MBCS tanımlanmamış |
_MBCS tanımlanmış |
_UNICODE tanımlanmış |
---|---|---|---|
_tcslen |
strlen |
strlen |
wcslen |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_l |
strlen |
_mbslen_l |
wcslen |
_mbslenve _mbslen_l çok baytlı karakter geçerlilik için test değil ancak çok baytlı karakter dizesi içinde çoklu bayt karakter sayısını döndürür._mbstrlenve _mbstrlen_l sınamak için çok baytlı karakter geçerlilik ve çok baytlı karakter sıraları tanımak.Dize için iletilmezse _mbstrlen veya _mbstrlen_l kod sayfası, -1 işlevi döndürür ve ayarlar için çoklu bayt geçersiz bir karakter içeriyor errno için EILSEQ.
Çıkış değeri ayarı tarafından etkilenen LC_CTYPE kategori ayarı yerel bölge; bakın setlocale daha fazla bilgi için.Bu işlevler sürümlerini _l soneki geçerli yerel bu yerel ayar-bağımlı davranış için kullanın sürümlerle _l yerine geçirilen yerel ayar parametresi kullanmasını dışında soneki özdeş.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 > |
Uyumluluk ek bilgi 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) );
// wstrlen 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) );
}
.NET Framework Eşdeğeri
Ayrıca bkz.
Başvuru
Çok Baytlı Karakter Sıralarının Yorumu
strrchr, wcsrchr, _mbsrchr, _mbsrchr_l