Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /var/www/vhosts/bilgigunlugum.net/httpdocs/index.php on line 43
C Programlama

BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C standart kütüphanesi > <string.h> > strtok

strtok() fonksiyonu

Bildirim

char* strtok(char *str, const char *delim);

char* strtok(char *restrict str, const char *restrict delim); (C99)

errno_t strtok_s(char *restrict str, rsize_t strmax, const char *restrict delim, char **restrict ptr); (C11)

Açıklama

Delim parametresi ile gösterilen karakter dizisi içindeki sınırlayıcı karakterleri kullanarak str parametresi ile gösterilen karakter dizisini parçalara ayırır.

Farklı bir ifade ile, str parametresi ile gösterilen karakter dizisi içinde delim parametresi ile gösterilen karakterleri göz ardı ederek, kalan karakterleri diziler halinde ayırır.

Fonksiyon önce, str parametresi ile çağrılır. Sonra, bir döngü içinde, karakter dizinin sonu gelene kadar, NULL bir değer ile tekrar tekrar çağrılır.

strtok_s() fonksiyonu ayrıca, her adımda (fonksiyonun her çağrılmasında), str parametresinde işlem yapılmak üzere kalan karakter sayısını strmax parametresine ve fonksiyonun dahili durumunu ptr parametresine yazar. Fonksiyonun tekrar çağrılarında (NULL değer ile), strmax ve ptr parametrelerine bir önceki çağrı tarafından kaydedilen değerler aktarılmalıdır.

Aşağıdaki hatalar çalışma zamanında algılandığında, ptr ile gösterilen parametreye herhangi bir değer kaydetmeden, yüklenmiş olan kısıtlayıcı işlem fonksiyonu çağrılır:

  • Strmax, delim veya ptr boş bir gösterici ise,
  • İlk olmayan bir çağrıda (NULL değer ile), *ptr NULL bir işaretçi ise,
  • İlk çağrıda strmax sıfır ise veya RSIZE_MAX değerinden büyük ise,
  • Arama işlemi boş sonlandırıcı ile karşılaşmadan str parametresi ile gösterilen karakter dizinin sonuna ulaşırsa.

Eğer str karakter dizisi boş bir karakter ile sonlandırılmamış ise veya strmax değeri karakter dizisinin boyutundan daha büyük ise sonuç belirsiz olur.

Parametreler

src: Alt dizilere ayrılacak olan boş bir karakter ('\0') ile sonlandırılmış bir karakter dizisidir.

delim: Sınırlayıcı byte değerlerini içeren boş bir karakter ('\0') ile sonlandırılmış bir karakter dizisidir.

strmax: Fonksiyonun ilk çalışmasında str parametresinin boyutunu içeren değerdir. Strtok_s() fonksiyonu bu parametreye işlem yapılacak kalan karakter sayısını yükler.

ptr: Strtok_s() fonksiyonunun dahili durumunu yüklemek için kullandığı char* veri türünden bir işaretçidir.

Dönüş değeri

Bir sonraki alt dizinin başlangıcını gösteren bir işaretçi geri döndürür. Eğer alt dizin yoksa NULL bir işaretçi geri döndürür.

Örnek


#include <stdio.h>
#include <string.h>

int main(void)
{
    char cdizi[] = "&Bilgisayar & ve & Programlama & Dilleri";
    const char *delp;

    printf("Karakter dizisi: %s\n", cdizi);

    /* Sınırlayıcı karakterlerin bulunduğu dizindeki karakterlerden herhangi
    birinin bulunmadığı ilk karakterin bellek adresini geri döndürür. */
    delp = strtok(cdizi, " &");
    printf("Sınırlayıcı karakter içermeyen ilk karakterin adresi: %p, dizi: %s\n", delp, delp);

    while (delp != NULL)  {
      printf("%s\n", delp);
      delp = strtok(NULL, " &");
    }

    return 0;
}


Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar.

Karakter dizisi: &Bilgisayar & ve & Programlama & Dilleri
Sınırlayıcı karakter içermeyen ilk karakterin adresi: 0060FED4, dizi: Bilgisayar
Bilgisayar
ve
Programlama
Dilleri

Program bir karakter dizisinin içeriğini diğer bir karakter dizisinin sonuna strcat() fonksiyonu ile ekledikten sonra elde edilen yeni karakter dizisini ekrana yazar.

Kaynak kodu

Copyright Public domain


char* strtok(char *str, const char *delim)
{
  static char* p=0;

  if(str)
     p=str;
  else if(!p)
     return 0;

  str = p+strspn(p,delim);
  p = str+strcspn(str,delim);
  if(p==str)
     return p=0;

  p = *p ? p+1 : 0;

  return str;
}