Nieoczekiwane zachowanie strtok

0

Witam,
mam taki oto program:

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

char func[50] = "a b c d e";

void eval()
{
    const char s[2] = " ";
    char *token = strtok(func, s);
    while( token != NULL )
    {
        printf("%s\n",token);
        token = strtok(NULL, s);
    }
    printf("\n");
}

int main()
{
    for(int i=1;i<3;i++)
    {
        eval();
    }
}

Wykonanie go daje rezultat:

a
b
c
d
e

a

Moje pytanie dotyczy tego, dlaczego przy drugim wywołaniu funkcji eval(), strtok nie wykonuje pętli dla wszystkich elementów func?

Zupełnie tak, jakby nulla napotykał.

1

https://pl.wikibooks.org/wiki/C/strtok

Jeśli słowo kończy się separatorem (delim), to ten kończący znak jest nadpisywany przez \0 i zapamiętywany jest wskaźnik do następnego znaku dla następnego wywołania strtok.
...
Nigdy nie należy używać tej funkcji. Jeśli jest to jednak konieczne, należy zauważyć, że:

  • Funkcje te modyfikują swój pierwszy argument.
    ...
0

Tak więc jak mógłbym to poprawić, by działało z wykorzystaniem funkcji strtok, ewentualnie z jakiego rozwiązania skorzystać by nie musieć używać strtok?

ok chyba mi sie udało

skorzystałem z bufora,któremu przypisałem zawartość func, tak, aby nie wywoływać strtok na zmiennej globalnej func,

1

Po prostu masz zrobić kopię napisu i na niej robić strtok.
https://wandbox.org/permlink/sfGiw4yFPWZD1SVg

1 użytkowników online, w tym zalogowanych: 0, gości: 1