因此,我正在编写一个读取mal文件的程序,并将其打印到输出文件中。但是,我遇到的一个问题是,对于我的第一个while循环,当我存储从文件到lineRef [i]的每一行的地址时,在该while循环中,如果我立即打印出来,它将打印正确的行。但是,在第二个while循环中,它仅显示文件的最后一行。
FILE * inputFile = fopen("example.mal", "r");
FILE * outputFile = fopen("output.lst", "w");
char linesFromFile[256];
char * lineRef[50];
char * labels[50];
int i = 0;
while(fgets(linesFromFile, 256, inputFile) != NULL)
{
lineRef[i] = linesFromFile;
i++;
}
i = 0;
while(lineRef[i] != NULL)
{
printf("%s\n", lineRef[i]);
i++;
}
return 0;
最佳答案
lineRef[i] = linesFromFile;
在这里,您将
linesFromFile
的相同地址分配给lineRef
的所有元素您需要为读入
lineRef
的每个元素的每一行分配内存,然后将linesFromFile的内容复制到其中。例如
while(fgets(linesFromFile, 256, inputFile) != NULL)
{
lineRef[i] = malloc(256);
memset(lineRef[i],'\0',256);
strncpy(lineRef[i] , linesFromFile,256);
i++;
}
关于c - 指针的字符数组,用于存储每个下标的文件的最后一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47149598/