Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Geçerli yerel ayarı veya geçirilen bir dizeyi kullanarak dizenin uzunluğunu alır. Bu işlevler , , , , strlenwcslen_mbslen_mbslen_l_mbstrlen_ldaha 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( // See note in remarks section about linkage
const char *str,
size_t numberOfElements
);
size_t wcsnlen(
const wchar_t *str,
size_t numberOfElements
);
size_t wcsnlen_s( // See note in remarks section about linkage
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) wcsnlen içinde null sonlandırıcı yoksa, hata koşulunu belirtmek için numberOfElementsdö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 , wcsnlenve _mbsnleniçin de geçerlidir_mbstrnlen.)
Bu işlevlerin her biri, sonlandırıcı null karakter dahil olmak üzere içindeki karakter strsayısını döndürür. Ancak, strnlenstrnlen_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 strnlenstrnlen_s geniş karakterli sürümleridir; ve wcsnlen bağımsız değişkenleri wcsnlen_s geniş karakter dizeleridir ve karakter sayısı geniş karakter birimlerindedir. Aksi takdirde, wcsnlen ve strnlenstrnlen_sgibi wcsnlen_s aynı şekilde davran.
strnlen, wcsnlenve _mbsnlen parametrelerini doğrulamaz. ise strNULL, bir erişim ihlali oluşur.
strnlen_s ve wcsnlen_s parametrelerini doğrulayın. ise strNULL, işlevler 0 döndürür.
_mbstrnlen ayrıca parametrelerini de doğrular.
strise NULL veya değerinden numberOfElementsINT_MAX büyükse_mbstrnlen, 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 errnoEINVAL 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.
Not
Windows SDK sürüm 10.0.26100.6901 ve Visual Studio 2026 veya sonraki sürümleri birlikte strnlen_s kullandığınızda ve wcsnlen_s artık static inline (iç bağlantı) olmadığınızda. Bunun yerine, bunlar inline (dış bağlantı).
CRT üst bilgilerini eklemeden önce önceki davranışa #define _STATIC_INLINE_UCRT_FUNCTIONS=1 dönmek için. Varsayılan olarak _STATIC_INLINE_UCRT_FUNCTIONS 0 olarak ayarlanır.
Bu değişiklik C++ standardına UCRT uyumluluğunu artırır ve C++ modülleriyle uyumluluğu artırır.
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