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 wcslen
sürümlerinin strlen
daha güvenli sürümleridir.
Önemli
_mbsnlen
, _mbsnlen_l
, _mbstrnlen
ve _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 wcsnlen
döndürülür; null sonlandırılan dizelerin uzunlukları kesinlikle değerinden numberOfElements
küçü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 strlen
değ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 , _mbsnlen
ve _mbstrnlen
için de geçerlidirwcsnlen
.)
Bu işlevlerin her biri, sonlandırıcı null karakter dahil olmak üzere içindeki karakter str
sayı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. wcsnlen
ve 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_s
gibi strnlen_s
aynı şekilde davran.
strnlen
, wcsnlen
ve _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. NULL
ise 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 EILSEQ
ayarlanı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