读取文件,但只插入文件中的最后一个字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读取文件,但只插入文件中的最后一个字符串相关的知识,希望对你有一定的参考价值。

我正在读取3个文件并将它们合并到一个名为mergedfile的数组中,但是当我尝试打印数组时,它只打印出第一个中的最后一个单词。不确定我是否错误地读取文件或将字符串放入数组错误,如果有人知道可能是什么问题我会很感激。谢谢。美国文件包含我需要按字母顺序排序的字符串,并插入到word.txt中

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main()
{

    //open three files for merging
    FILE *fp1 = fopen("american0.txt","r");
    FILE *fp2 = fopen("american1.txt","r");
    FILE *fp3 = fopen("american2.txt","r");



    //open file to store the result
    FILE *fpm = fopen("words.txt", "w");



    //creating an array to save the files data
    char temp[50];
    char *(*mergedFile);
    //creating variables for while and if loops
    int i =0, j=0;
    int count=0;
    char *p;
    int q=0;
    int z = 0;



    //checking to make sure files are being read

    if(fp1 == NULL || fp2 == NULL || fp3 == NULL)
    {
        printf("Could not open one or all of the files.\n");
        printf("Exiting program!");
        exit(0);
    }




    //reading the data from files

    while (fgets(temp, 50 ,fp1) != NULL)
    {
        count++;
    }
    fclose(fp1);
    while (fgets(temp, 50 ,fp2) != NULL)
    {

        count++;
    }
    fclose(fp2);
    while (fgets(temp, 50 ,fp3) != NULL)
    {

        count++;
    }
    fclose(fp3);




    //inserting data into the array
    mergedFile = (char **)malloc(sizeof(char*) *count);
    for(int i=0; i<count; i++){
        mergedFile[i]=(char*)malloc(sizeof(char)*50);

    }
    fp1 = fopen("american0.txt","r");
    fp2 = fopen("american1.txt","r");
    fp3 = fopen("american2.txt","r");

    if(fp1 == NULL || fp2 == NULL || fp3 == NULL )
    {
        printf("Could not open one or all of the files.\n");
        printf("Exiting program!");
        exit(0);
    }
    i=0;

    while (fgets(temp, 50, fp1) != NULL)
    {
         mergedFile[i++]= temp;     
    }

    while (fgets(temp, 50, fp2) != NULL)
    {
         mergedFile[i++]= temp;     
    }

    while (fgets(temp, 50, fp3) != NULL)
    {
         mergedFile[i++]= temp;     
    }
    for(z = 0; z <count; z++)
    printf("%s", mergedFile[z]);




    /*
    //sorting the array alphabetically
    for(i=1; i<count; i++)
    {
        for(j=1; j<count;j++)
        {
            if(strcmp(mergedFile[j-1], mergedFile[j]) > 0)
            {
                strcpy(temp, mergedFile[j-1]);
                strcpy(mergedFile[j-1], mergedFile[j]);
                strcpy(mergedFile[j], temp);
            }
        }
    }
    */

    //next goal is to print the array to file word.txt



    fclose(fp1);
    fclose(fp2);
    fclose(fp3);
    //fclose(fpm);


    return 0;

}
答案

每次你做fgets,它都会覆盖temp

此外,mergedFile中的所有条目都被赋予与temp相同的[指]值。

因此,所有条目将以第三个文件的最后一行的值结束。

您需要为每一行保存单独的副本。所以,改变所有:

mergedFile[i++]= temp;

成:

mergedFile[i++]= strdup(temp);

以上是关于读取文件,但只插入文件中的最后一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

从 .txt 文件 C 读取时重复最后一个字符串

把字符串的增删查改,插入以及删除各种操作封装为一个用c代码写的库,代码怎么写,我写不来求教

将范围插入工作表中已使用数据的最后一列

python读取文本文件,如何将每行最后一个特定字符替换?

写入串口但只接收第一个字符?

关于在各浏览器中插入音频文件的html代码片段