В моей системе следующая программа:
int main(){
char *strgptr;
char buf[5] = {'b','a','a','a','\0'};
char *tmp = strtok_r(buf, ".", &strgptr);
if(tmp != NULL){
printf("Found a . in baaa?\n");
printf("It was found starting at: %s\n", tmp);
}
else
printf("Everything is working.\n");
}
печатает:
Found a . in baaa?
It was found starting at: baaa
Однако, если я поменяю местами "." строка разделителя в strtok_r для "a", я получаю (как и ожидалось):
Found a . in baaa?
It was found starting at: b
Но замена "." для любого другого символа, не появляющегося в buf (например, "c"), получается:
Found a . in baaa?
It was found starting at: baaa
Страница руководства для strtok_r, как и ожидалось, говорит:
The strtok() and strtok_r() functions return a pointer to the next token,
or NULL if there are no more tokens.
Так почему же strtok_r не возвращает NULL при передаче строки, не содержащей ни одного из рассматриваемых токенов?