首页 > 解决方案 > C:无法将文件中的行存储到数组中

问题描述

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

//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两次,而不是两个不同的行。为什么会发生这种情况,我可以做些什么来解决这个问题?

标签: carraysfilefgets

解决方案


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

推荐阅读