strtok
, _strtok_l
, wcstok
, , _wcstok_l
, _mbstok
, _mbstok_l
Geçerli yerel ayarı veya geçirilen belirtilen yerel ayarı kullanarak bir dizedeki sonraki belirteci bulur. Bu işlevlerin daha güvenli sürümleri mevcuttur; bkz. strtok_s
, _strtok_s_l
, wcstok_s
_wcstok_s_l
, , _mbstok_s
, _mbstok_s_l
.
Önemli
_mbstok
ve _mbstok_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
char *strtok(
char *strToken,
const char *strDelimit
);
char *_strtok_l(
char *strToken,
const char *strDelimit,
_locale_t locale
);
wchar_t *wcstok( /* Non-standard, define _CRT_NON_CONFORMING_WCSTOK to use */
wchar_t *strToken,
const wchar_t *strDelimit
);
wchar_t *wcstok(
wchar_t *strToken,
const wchar_t *strDelimit,
wchar_t **context
);
wchar_t *_wcstok_l(
wchar_t *strToken,
const wchar_t *strDelimit,
_locale_t locale
);
unsigned char *_mbstok(
unsigned char *strToken,
const unsigned char *strDelimit
);
unsigned char *_mbstok_l(
unsigned char *strToken,
const unsigned char *strDelimit,
_locale_t locale
);
Parametreler
strToken
Belirteç veya belirteç içeren dize.
strDelimit
Sınırlayıcı karakter kümesi.
locale
Kullanılacak yerel ayar.
context
Ayrıştırıcının bir sonraki çağrınızda wcstok
kaldığı yerden devam edebilmesi için ayrıştırıcının iç durumunu depolamak için kullanılan belleğe işaret eder.
Dönüş değeri
içinde strToken
bulunan sonraki belirtecin işaretçisini döndürür. İşlevler, başka belirteç bulunamazsa geri döner NULL
. Her çağrı, strToken
döndürülen belirteç sonrasında gerçekleşen ilk sınırlayıcı için null bir karakter değiştirerek değişir.
Açıklamalar
strtok
işlevi içinde strToken
bir sonraki belirteci bulur. içindeki strDelimit
karakter kümesi, geçerli çağrıda strToken
bulunabilecek belirtecin olası sınırlayıcılarını belirtir. wcstok
ve _mbstok
geniş karakterli ve çok baytlı sürümleridir strtok
. bağımsız değişkenleri ve dönüş değeri wcstok
geniş karakterli dizelerdir. argumets ve dönüş değeri _mbstok
çok baytlı karakter dizeleridir. Bu üç işlev aynı şekilde davranır.
öğesinin wcstok
iki bağımsız değişken sürümü standart değildir. Bu sürümü kullanmanız gerekiyorsa, önce (veya #include <string.h>
) tanımlamanız _CRT_NON_CONFORMING_WCSTOK
#include <wchar.h>
gerekir.
Önemli
Bu işlevler, arabellek taşması sorununun getirdiği 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.
öğesine yapılan ilk çağrıda strtok
işlev, baştaki sınırlayıcıları atlar ve içindeki strToken
ilk belirtecin işaretçisini döndürerek belirteci null karakterle sonlar. öğesine yapılan bir dizi çağrı strtok
ile kalan strToken
bölümünden daha fazla belirteç ayrılabilir. Her çağrısı, bu çağrı strtok
tarafından döndürülenden token
sonra null karakter ekleyerek değişirstrToken
. 'den strToken
sonraki belirteci okumak için bağımsız değişkeni için bir NULL
değerle çağrısında strtok
bulunurstrToken
. bağımsız değişkeni, NULL
strToken
değiştirilen strToken
içinde bir sonraki belirteci aramaya neden olurstrtok
. Bağımsız strDelimit
değişken, sınırlayıcı kümesinin değişebilmesi için bir çağrıdan sonrakine herhangi bir değeri alabilir.
Çı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.
Not
Her işlev, dizeyi belirteçlere ayrıştırma için bir iş parçacığı yerel statik değişkeni kullanır. Bu nedenle, birden çok iş parçacığı istenmeyen efektler olmadan aynı anda bu işlevleri çağırabilir. Ancak, tek bir iş parçacığında, bu işlevlerden birine yapılan araya ekleme çağrılarının veri bozulması ve yanlış sonuçlar üretme olasılığı yüksektir. Farklı dizeleri ayrıştırırken, sonrakini ayrıştırmaya başlamadan önce bir dizeyi ayrıştırma işlemini tamamlayın. Ayrıca, başka bir işlevin çağrıldığı bir döngü içinden bu işlevlerden birini çağırırken tehlike olasılığına dikkat edin. Diğer işlev bu işlevlerden birini kullanıyorsa ara sıralı çağrılar sonucunda veri bozulması tetiklenir.
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 |
---|---|---|---|
_tcstok |
strtok |
_mbstok |
wcstok |
_tcstok |
_strtok_l |
_mbstok_l |
_wcstok_l |
Gereksinimler
Yordam | Gerekli başlık |
---|---|
strtok |
<string.h> |
wcstok |
<string.h> veya <wchar.h> |
_wcstok_l |
<tchar.h> |
_mbstok , _mbstok_l |
<mbstring.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Örnek
// crt_strtok.c
// compile with: /W3
// In this program, a loop uses strtok
// to print all the tokens (separated by commas
// or blanks) in the string named "string".
//
#include <string.h>
#include <stdio.h>
char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;
int main( void )
{
printf( "Tokens:\n" );
// Establish string and get the first token:
token = strtok( string, seps ); // C4996
// Note: strtok is deprecated; consider using strtok_s instead
while( token != NULL )
{
// While there are tokens in "string"
printf( " %s\n", token );
// Get next token:
token = strtok( NULL, seps ); // C4996
}
}
Tokens:
A
string
of
tokens
and
some
more
tokens
Ayrıca bkz.
Dize işleme
Yerel ayar
Çok baytlı karakter dizilerinin yorumlanması
strcspn
, wcscspn
, _mbscspn
, _mbscspn_l
strspn
, wcsspn
, _mbsspn
, _mbsspn_l