因此,我正在编写一个读取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/

10-11 19:45