C:无法将文件中的行存储到数组中

时间:2018-11-03 21:42:31

标签: c arrays file fgets

这是我用来读取文本文件中的行并将其存储到“表达式”数组中的一些代码:

//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 :(得分:2)

每次读取一行时,都将其存储在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;
}