/ / strtok () nie drukuje poprawnej wartości - c, strtok

strtok () nie drukuje poprawnej wartości - c, strtok

Czytam plik CSV za pomocą C i chcę go zapisaćtokeny z strtok () w tablicy. W jakiś sposób, gdy plik CSV ma wiele linii, nie otrzymuję poprawnego wyjścia z tokenów. Plik CSV wygląda tak (Tylko dwie linie dla tego przykładu, prawdziwy plik będzie miał więcej niż 100 wierszy):

abc,def,ghi

jkl,mno

Mój kod to:

    void main() {



FILE *fp;
fp = fopen("simple.csv", "r");
const char s[2] = ",";
char *token;
char *out[5];
int i = 0;
if (fp != NULL)
{
char line[50];
while (fgets(line, sizeof line, fp) != NULL)
{
token = strtok(line, s);

//for (token; token != NULL; token = strtok(NULL, ","))
while (token != NULL)
{
out[i++] = token;
//printf("%s", token);
token = strtok(NULL, s);

}

printf("%sn", out[0]);

}

//for (i = 0; i < 5; i++)


fclose(fp);
}
else {
printf("error opening file");
}
}

Chcę, aby każdy ciąg rozdzielany przecinkami był przechowywany w tablicy za pomocą pętli. Kiedy wydrukuję pierwszy element tablicy (out[0]), wyjście to:

abc

jkl

podczas gdy oczekuję, że będzie to tylko żeton:

ABC

Czy ktoś może mi powiedzieć, na czym polega problem?

Odpowiedzi:

1 dla odpowiedzi № 1

Problemem jest strtok zwraca wskaźniki wskazujące na kilka miejsc line, którego zawartość zmienia się cały czas.

Dlatego musisz skopiować zawartość tokena, a nie tylko przypisać wskaźniki.

Na przykład zdefiniuj out być:

char out[5][10];  // max of 5 words, each of 10 chars max (including )

i wewnątrz pętli:

strcpy(&out[i++][0], token);