Массив строк из одной строки в файле - PullRequest
0 голосов
/ 06 апреля 2020

Я хотел бы получить массив строк из файла .txt. Я попытался использовать fgets, а затем strtok для разделения строк. Я думаю, что мои fgets неправильны, но я не понимаю, как добраться до того, что я хочу.

char* str[numWords];
char line[] = fgets(str, numCharTotal, filep);
char delim[] = " ";
int j;
for(j = 0; j != numWords; j++)
{
       str[j]= strtok(line, delim);
}

Другими словами, у меня есть файл .txt

This is a txt file

, и я хочу иметь возможность иметь его в форме

char* str[] = {"This","is","a","txt","file"};

printf("%s", str[0])  //then "This" is printed
//...
//Till last word of txt file
//...
printf("%s", str[4])  //then "file" is printed

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

fgets прочитает строку из вашего файла и сохранит ее в виде строки. Вам нужно выделить память для вашего буфера (строка массива char в вашем коде). После вызова strtok со строкой массива char в качестве первого параметра l oop путем вызова strtok с передачей NULL для первого параметра. Если вы продолжите пропускать строку массива char, вы получите только первый токен (слово) для каждой итерации l oop.

char *str[numWords];
char line[numCharTotal];
char delim[] = " ";
int j = 0;

fgets(line, numCharTotal, filep);

char *token = strtok(line, delim);
while (token != NULL) {
    str[j] = token;
    ++j;
    token = strtok(NULL, delim);
}

for (int i = 0; i < numWords; ++i) {
    printf("%s\n", str[i]);
}
0 голосов
/ 06 апреля 2020

Вы должны поставить выражение:

line = fgets(str, numCharTotal, filep);

За пределами l oop и использовать l oop, чтобы прочитать «строку» по одному слову за раз.

В настоящее время первая итерация вашего l oop читает первую строку, а затем первое слово. И тогда другие итерации попытаются прочитать следующие строки файла, которые пусты

...