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