Чтение строк из файла и помещение их в массив строк - PullRequest
1 голос
/ 23 января 2012

Что я хотел бы сделать, так это уметь читать строки из файла и вставлять их в массив строк.Это то, что я имею до сих пор, но это не похоже на работу.

...
char line [128];
char file [10][128];

plist = fopen("plist1.txt", "r");

while(fgets(line, sizeof line, plist) != NULL){
   file[i][0]= line;
   i++;
}

Я попытался сделать file[i][0] = *line;, и мне удалось распечатать первый символ каждой строки.Это лучший способ сделать то, что я пытаюсь сделать?

Кроме того, число строк в текстовом файле будет варьироваться, поэтому я хотел бы, чтобы мой массив имел переменную длину вместо 10.

РЕДАКТИРОВАТЬ: я пробовал два решения, перечисленных ниже.Оба дают мне ошибку сегментации, касающуюся либо strcpy, либо fgets.

1.  while (fgets(file[i], sizeof(file[i]), plist))
       i++;

2.  while (fgets(line, sizeof(line), plist)){
       strcpy(file[i], line);
       i++;
    }

Ответы [ 3 ]

4 голосов
/ 23 января 2012

Попробуйте это:

while (fgets(file[i], sizeof(file[i]), plist))
    i++;

В качестве альтернативы

while (fgets(line, sizeof(line), plist))
    strcpy(file[i], line);
2 голосов
/ 23 января 2012

Это полностью рабочее решение, при условии, что plist1.txt содержит строку текста в каждой строке. fgets() по умолчанию также включает в конце символ новой строки, от которого вам нужно избавиться. Также неплохо использовать символические константы, чтобы вы могли легко изменить их позже, если захотите.

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

#define BUF 128 /* can change the buffer size as well */
#define TOT 10 /* change to accomodate other sizes, change ONCE here */

int main(void) {
    char line[TOT][BUF];
    FILE *plist = NULL; 
    int i = 0;
    int total = 0;

    plist = fopen("plist1.txt", "r");
    while(fgets(line[i], BUF, plist)) {
        /* get rid of ending \n from fgets */
        line[i][strlen(line[i]) - 1] = '\0';
        i++;
    }

    total = i;

    for(i = 0; i < total; ++i)
        printf("%s\n", line[i]);

    return 0;
}
0 голосов
/ 23 января 2012

Пожалуйста, посмотрите на http://www.daniweb.com/software-development/c/code/216411

...