У меня есть реализация strtok (вроде), но она не печатает токен!
char *tokenizer(char s[], const char *delimiter) {
char *p; //return value of function
int i = 0;
while(s[i] != *delimiter) //to get the size of array just right
i++;
char arr[i+1];
p = arr; //can't return an array, so assigned to a
//pointer
int j = 0;
i = 0;
while(s[i]!=*delimiter) {
arr[j] = s[i];
i++;
j++;
}
arr[j] = '\0';
printf("%s\n",p); //this statement works, but if excluded
//main prints nothing.
return p;
}
Эта функция вызывается из основного списка следующим образом:
char s[] = "tab-tab";
const char del[2] = "-";
char *p;
p = tokenizer(s, del);
printf("%s\n", p); //prints nothing without the printf in
//tokenizer
Я попытался отладить с помощью gdb и проверял значения локальной переменной после каждой строки. p
обновляется с arr[j]
внутри tokenizer
, но становится равным нулю, как только tokenizer
заканчивается и кадр возвращается к main
.
Значение p
в main
не становится NULL
, оно становится пустой строкой и печатает это!
Однако p
в main
печатает токен, если включено printf
в tokenizer
.
Это уже включает обходной путь. Я знаю, что это не может быть способом реализации strtok. Я начал с более сложной, «опытной» версии, которая имела указатели, но не могла заставить ее работать, поэтому согласился на эту версию «для начинающих».