strnlen, strnlen_s, wcsnlen, , wcsnlen_s, _mbsnlen, _mbsnlen_l, _mbstrnlen, _mbstrnlen_l

Geçerli yerel ayarı veya geçirilen bir dizeyi kullanarak dizenin uzunluğunu alır. Bu işlevler , , , , _mbstrlen_l_mbstrlen_mbslen_l_mbslen, ve wcslensürümlerinin strlendaha güvenli sürümleridir.

Önemli

_mbsnlen, _mbsnlen_l, _mbstrnlenve _mbstrnlen_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 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
);

Parametreler

str
Null ile sonlandırılan dize.

numberOfElements
Dize arabelleğinin boyutu.

locale
Kullanılacak yerel ayar.

Dönüş değeri

Bu işlevler, sonlandırıcı null karakter dahil olmak üzere dizedeki karakter sayısını döndürür. Dizenin ilk numberOfElements baytları (veya için geniş karakterler) numberOfElements içinde null sonlandırıcı yoksa, hata koşulunu belirtmek için wcsnlendöndürülür; null sonlandırılan dizelerin uzunlukları kesinlikle değerinden numberOfElementsküçüktür.

_mbstrnlen ve _mbstrnlen_l dize geçersiz bir çok baytlı karakter içeriyorsa -1 döndürür.

Açıklamalar

Not

strnlen değerinin yerine strlendeğildir; strnlen yalnızca bilinen boyuttaki bir arabellekte (örneğin, bir ağ paketi) gelen güvenilmeyen verilerin boyutunu hesaplamak için kullanılmak üzere tasarlanmıştır. strnlen uzunluğu hesaplar, ancak dize sonlandırılmazsa arabelleğin sonundan geçilmez. Diğer durumlarda kullanın strlen. (Aynı durum , _mbsnlenve _mbstrnleniçin de geçerlidirwcsnlen.)

Bu işlevlerin her biri, sonlandırıcı null karakter dahil olmak üzere içindeki karakter strsayısını döndürür. Ancak, strnlen strnlen_s dizeyi tek baytlı karakter dizesi olarak yorumlayıp bu nedenle, dize çok baytlı karakterler içerse bile dönüş değeri her zaman bayt sayısına eşittir. wcsnlenve wcsnlen_s sırasıyla ve'nin strnlen strnlen_s geniş karakterli sürümleridir; ve wcsnlen_s bağımsız değişkenleri wcsnlen geniş karakter dizeleridir ve karakter sayısı geniş karakter birimlerindedir. Aksi takdirde, wcsnlen ve strnlen wcsnlen_sgibi strnlen_s aynı şekilde davran.

strnlen, wcsnlenve _mbsnlen parametrelerini doğrulamaz. ise str NULL, bir erişim ihlali oluşur.

strnlen_s ve wcsnlen_s parametrelerini doğrulayın. ise str NULL, işlevler 0 döndürür.

_mbstrnlen ayrıca parametrelerini de doğrular. NULLise str veya değerinden INT_MAX_mbstrnlen büyüksenumberOfElements, Parametre doğrulama bölümünde açıklandığı gibi geçersiz bir parametre özel durumu oluşturur. Yürütmenin devam etmesi için izin verilirse, _mbstrnlen olarak ayarlanır errno EINVAL ve -1 döndürür.

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
_tcsnlen strnlen strnlen wcsnlen
_tcscnlen strnlen _mbsnlen wcsnlen
_tcscnlen_l strnlen _mbsnlen_l wcsnlen

_mbsnlen ve _mbstrnlen çok baytlı karakter dizesinde çok baytlı karakter sayısını döndürür. _mbsnlen kullanımda olan çok baytlı kod sayfasına veya geçirilen yerel ayara göre çok baytlı karakter dizilerini tanır; çok baytlı karakter geçerliliğini test etmez. _mbstrnlen çok baytlı karakter geçerliliğini test eder ve çok baytlı karakter dizilerini tanır. 'a _mbstrnlen geçirilen dize geçersiz bir çok baytlı karakter içeriyorsa, errno olarak EILSEQayarlanır.

Çı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 sürümleri aynıdır, ancak son ekine sahip _l olmayanlar bu yerel ayara bağımlı davranış için geçerli yerel ayarı kullanır ve son eki olan _l sürümler bunun yerine geçirilen yerel ayar parametresini kullanır. Daha fazla bilgi için bkz . Yerel Ayar.

Gereksinimler

Yordam Gerekli başlık
strnlen, strnlen_s <string.h>
wcsnlen, wcsnlen_s <string.h> veya <wchar.h>
_mbsnlen, _mbsnlen_l <mbstring.h>
_mbstrnlen, _mbstrnlen_l <stdlib.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

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

Ayrıca bkz.

Dize işleme
Yerel ayar
Çok baytlı karakter dizilerinin yorumlanması
setlocale, _wsetlocale
strncat, _strncat_l, wcsncat, , _wcsncat_l, _mbsncat, _mbsncat_l
strncmp, wcsncmp, _mbsncmp, _mbsncmp_l
strcoll işlevleri
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