2012-11-29 19 views
5

strtok() kullanarak dizeleri ayrıştırmaya çalışıyordum; Bir noktalı virgülle ayrılmış dizeleri ayrıştırmaya çalışıyorum (;). Ama noktalı virgül olmayan bir dize strtok() için girdiğimde, tüm dizeyi döndürür. Belirteç eşleşmeleri yoksa NULL dönmemeli mi?Strtok(), simge belirtimi yok

int main(int argc, char** argv) 
{ 
    char cmd[] = "INSERT A->B B->C INSERT C->D"; 
    char delim[] = ";"; 
    char *result = NULL; 

    result = strtok(cmd,delim); 

    if(result == NULL) 
    { 
     printf("\n NO TOKENS\n"); 
    } 
    else 
    { 

     printf("\nWe got something !! %s ",result); 

    } 

    return (EXIT_SUCCESS); 
} 

çıkışı:

Bu benim kodudur şey bulduk !! INSERT A-> B B-> C INSERT C-> D

+6

var ... şimdi a ve b

Jetonlar “Belirteç eşleşmeleri yoksa NULL döndürmemeli?” Bütün dize bir jeton eşleşmesidir. –

+0

';' Jeton yerine, strchr’i deneyin. – ams

cevap

9

Hayır, ayırıcı o belirteçleri ayıran şey, bu yüzden hiçbir ayraçları, yoksa daha sonra tüm dizenin ilk belirteç

kabul edilir demektir

iki belirte sahip olup olmadığını düşünün, sonra o jetonlardan birini alın. Eğer b götürmek o zaman varsa

a;b

sahip

a

hala simge a