2016-09-21 5 views

ответ

3

Предположим, что вы храните strchr в символ * ч

Тогда ч-СИЛ + 1 вернет вам позицию символа, который вы искали в strchr

Используя встроенную функцию подстроки или определения функция самостоятельно вы можете создать то время цикла, как это:

i=0; 
while(ch != NULL) 
{ 
    printf("Your subsrting is : %s", substring_function(i,(ch-str+1))); 
    i = ch-str+1; 
    ch=strchr(ch+1,';'); 
} 
+0

Спасибо за ответ. Я буду использовать 'strchr', который имеет в качестве аргумента токен, а не позицию i. –

+0

Вы не меняете 'ch' в цикле, так что это бесконечный цикл. – mch

+0

спасибо за это –

0

ОК, нашли решение с strtok, и я хотел бы преобразовать его с помощью strchr. Tokenizer - статическая переменная, которая содержит символ для токенизации. Есть идеи?

static const char *a(const char *string,int tkn) { 
    char *tokenized=strdup(string); 
    char *token; 
    token=strtok(tokenized, tokenizer); 
    int i=0; 
    while(token != NULL) { 
     if (i == (tkn-1)) { 
     break; 
     } 
     token = strtok(NULL, tokenizer); 
     i++; 
    } 
    return token; 
} 
+0

Этот подход представляет собой утечку памяти, так как выделенный «токенизируемый» не обязательно восстанавливается для более поздней «свободной»() '. – chux

+0

Большое спасибо, я могу добавить бесплатно в конце концов. За гранью этого? –

+0

«Я могу добавить бесплатное после всех» -> Это не так просто, как код возвращает указатель на выделенную память, но потерял начало. Предложите опубликовать ответ, который использует вашу идею «добавить бесплатную». – chux