这是我用来读取文本文件中的行并将其存储到“表达式”数组中的一些代码:
//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
打印两次,而不是两行不同。为什么会发生这种情况,我该怎么做才能解决此问题?
答案 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;
}