C: Невозможно сохранить строки из файла в массив - PullRequest
0 голосов
/ 04 ноября 2018

Это код, который я использовал для чтения и сохранения строк из текстового файла в массив выражений:

//create array for going through the file
char lines[128];
//create array for storing expressions
char **expressions = malloc(128*sizeof(char*));

FILE *file = fopen(argv[1],"r");
int count = 0;
while (fgets(lines,128,file)){
    expressions[count] = lines;
    printf("expressions[%d] is %s\n",count,expressions[count]);
    count++;
}

for (int i = 0; i<count; i++){
    printf("%s",expressions[i]);
}

И вот текст, который этот код пытается прочитать:

f = g + h - 42;
g = 12 + 23;

Моя проблема заключается в том, что, хотя он, кажется, проходит файл должным образом (количество соответствует количеству строк), последний цикл печати печатает последнюю строку g = 12 + 23 дважды вместо двух отдельных строк. Почему это происходит и что я могу сделать, чтобы решить эту проблему?

1 Ответ

0 голосов
/ 04 ноября 2018

Каждый раз, когда вы читаете строку, вы сохраняете ее в массиве символов lines, а затем сохраняете адрес этого массива в следующем месте expressions. Если вы посмотрите на значения, хранящиеся в expressions, то обнаружите, что они все одинаковые.

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

Давайте работать не более чем на 100 строках, каждая строка не должна превышать 127 символов (как указано выше):

char expressions[100][128];

int count = 0;
while (fgets(lines,128,file)) {
    strcpy(expressions[count], lines);
    printf("expressions[%d] is %s\n",count,expressions[count]);
    count++;

    if (count == 100)
      break;
}
...