Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:无法将文件中的行存储到数组中_C_Arrays_File_Fgets - Fatal编程技术网

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

C:无法将文件中的行存储到数组中,c,arrays,file,fgets,C,Arrays,File,Fgets,这是我用来将文本文件中的行读取并存储到“表达式”数组中的一些代码: 我这里的问题是,虽然它似乎正确地遍历了文件(计数与行数匹配),但最终的打印循环将最后一行g=12+23打印两次,而不是两个不同的行。为什么会发生这种情况?我可以做些什么来解决这个问题?每次读取一行时,您都将其存储在行字符数组中,然后将该数组的地址保存在表达式的下一个空格中。如果查看表达式中存储的值,您会发现它们都是相同的 如果你想保留每一行的副本,你必须有足够的空间来存储每一行的副本。如果要处理的行数最多,则可以在程序中分配该内

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


我这里的问题是,虽然它似乎正确地遍历了文件(计数与行数匹配),但最终的打印循环将最后一行
g=12+23
打印两次,而不是两个不同的行。为什么会发生这种情况?我可以做些什么来解决这个问题?

每次读取一行时,您都将其存储在
字符数组中,然后将该数组的地址保存在
表达式
的下一个空格中。如果查看
表达式中存储的值,您会发现它们都是相同的

如果你想保留每一行的副本,你必须有足够的空间来存储每一行的副本。如果要处理的行数最多,则可以在程序中分配该内存。否则,您将不得不开始使用动态内存分配

让我们最多使用100行,每行长度不超过127个字符(如上所述):


这最终对我有用,谢谢你;因此,由于每次fgets都会覆盖我的缓冲区数组,因此解决方案是将我的当前行复制到计数索引,而不是使用赋值运算符Ace。很高兴它起作用了!是的,正如您所说,您正在保存您所阅读内容的副本,以便下次可以覆盖它。当然,还有其他方法可以做到这一点,比如使用
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]);
}
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;
}