| 
 | 
 
读入两个文件(str1.txt str2.txt)中的内容(均只含一串字符),存入一数组中排序再写入一个新创建的文件(newstr.txt)中 
排序,写入,都没问题,可是读入的时候,需要加 i-=1(下面有标明的~),如果不加,两次读写完后都会在末尾多出一个随即字符,比如若str1中是qwert,str2.txt中是asdfg,那么不加i-=1的话,写入的结果是: 
××ADEFGQRSTW(×代表随即字符,调试时显示的是一个类似加了音标的小y) 
即一开始存入数组的是QWERT×ASDFG× 
 
 
#include <stdio.h> 
#define NAMELEN 10 
#define F_NAMELEN 10 
#define STRLEN 100 
#define NULL 0 
void main() 
{ 
        FILE *fp; 
        int i=0,j,min,temp,length; 
        char ch,allstr[STRLEN],r1[F_NAMELEN],r2[F_NAMELEN],w1[F_NAMELEN]; 
        printf("Input File1(str1.txt) please\n=> ");//输入要读入的第一个文件的名字 
        scanf("%s",r1); 
        if ((fp=fopen(r1,"r"))==NULL) 
        { 
                printf("File open failed\n"); 
                exit(0); 
        } 
        while(!feof(fp)) 
                allstr[i++]=fgetc(fp); 
        i-=1;//不加的话,末尾会多一个随机字符,为什么?是判断条件不对吗? 
        printf("Input File2(str2.txt) please\n=> ");//输入要读入的第二个文件的名字 
        scanf("%s",r2); 
        if ((fp=fopen(r2,"r"))==NULL) 
        { 
                printf("File open failed\n"); 
                exit(0); 
        } 
        while(!feof(fp)) 
                allstr[i++]=fgetc(fp);//将文件中的字符存入数组,进行排序 
        allstr[i-1]='\0';//这里也必须用i-1 
        length=strlen(allstr); 
        for (i=0;i<length-1;i++)    //对字符排序 
        { 
                for (min=i,j=i+1;j<length;j++) 
                        if (allstr[j]<allstr[min]) 
                                min=j; 
                if (min!=i) 
                { 
                        temp=allstr[i]; 
                        allstr[i]=allstr[min]; 
                        allstr[min]=temp; 
                } 
        } 
        printf("Input new file name(NewStr.txt) please\n=> "); 
                                               //输入要写入的文件的名字 
        scanf("%s",w1); 
        if ((fp=fopen(w1,"w"))==NULL) 
        { 
                printf("File open failed\n"); 
                exit(0); 
        } 
        i=0; 
        while(allstr[i]) 
                fputc(allstr[i++],fp); 
        fclose(fp); 
} 
 |   
 
 
 
 |