/ / strtok () не печата правилната стойност - c, strtok

strtok () не печата правилната стойност - c, strtok

Аз чета CSV файл с C и искам да го съхранявамсимволите от strtok () в масив. По някакъв начин, когато CSV файлът има няколко реда, не получавам правилния изход на символите. Файлът CSV изглежда така (Само два реда за този пример, истинският файл ще има повече от 100 реда):

abc,def,ghi

jkl,mno

Моят код е:

    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");
}
}

Искам всеки отрязъци, дефинирани със запетая, да се съхранява в масив чрез линия. Когато разпечатам първия елемент на масива (out[0]), изходът е:

abc

jkl

докато аз очаквам това да е само символът:

абв

Може ли някой да ме уведомите какъв е проблемът?

Отговори:

1 за отговор № 1

Проблемът е, че strtok връща указатели, сочещи към няколко места line, чието съдържание се променя през цялото време.

По този начин трябва да копирате съдържанието на означението, а не просто да зададете указатели.

Например, дефинирайте out да бъде:

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

и вътре в цикъла:

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