这么恼火的处理中文文件的问题!!!及时揭帖!
问题:大家帮我分析分析啊???
我在用文件处理中文的问题时遇到了让人疑惑的问题,磁盘上建立了一个中文文件cnforr.txt,现在我要把其中的中文字符读入到指针数组中(因为中文字符是
占了2个字节长度),中文源文件如下,目标文件取名"cnW.txt":
世界你好!
我作如下的程序处理此中文文件(采用fread-fwrite函数):
#include <stdio.h>
main()
{
FILE *fpr,*fpw;
int i,j;
char *cn[100];
fpr=fopen("cnforr.txt","r");
for(i=0;i<5;i++)
fread(&cn[i],2,1,fpr); /*既然说数组名代表了数组首地址,为什么读取文件的时候此处非要用取地址符号&呢,否则得到的答案不对呢?而当
数组不是指针数组而是普通的数组时就不能加&符号呢?严重疑惑??? */
fclose(fpr);
fpw=fopen("cnW.txt","w");
for(j=0;j<5;j++)
/* fprintf(fpw,"%s",cn[j]); */ /* 用这一句为什么不行呢?难道fread读出的数据非要用fwrite函数写入文件才能正确显示吗?否则显示的东西不知
道为何物啊?*/
fwrite(&cn[j],2,1,fpw);
fclose(fpw);
}
==========================
我把源文件“cnforr.txt”改为:
世,界,你,好,!
想用fscanf-fprintf函数试一试:
#include <stdio.h>
main()
{
FILE *fpr,*fpw;
int i=0,j;
char *cn[100];
char str[2];
fpr=fopen("cnforr.txt","r");
cn[0]=str; /*使数组指针有所指 ,这一句加不加都出错*/
/* for(i=0;i<4;i++) */ /*
{fscanf(fpr,"%s,%s,%s,%s,%s",cn[0],cn[1],cn[2],c[3],c[4]);} /*此时中文字符之间用逗号作了分隔,以便函数能识别字符串的界线.*/
fpw=fopen("cnW.txt","w+");
for(j=0;j<5;j++)
fprintf(fpw,"%s\n",cn[j]);
fclose(fpr);
fclose(fpw);
}
答案千奇百怪啊!!!
=========================
采用fputs-fgets函数也解决不了问题:
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *fpr,*fpw;
int i,j;
char *cn[100],str[3];
fpr=fopen("cnforr.txt","r");
cn[0]=str; /* 这是让指针数组事先有所指*/
for(i=0;i<5;i++)
fgets(cn[i],3,fpr);
fclose(fpr);
fpw=fopen("cnW.txt","w+");
for(j=0;j<5;j++)
fputs(cn[j],fpw); /* 用这个语句的话,有时候能出正确答案,有时候又不能出正确答案,甚至有时候跳出系统,实在搞不懂 */
/* fprintf(fpw,"%s",cn[j]);*/ /* 用这个语句,能出正确答案的次数很少,大多数情况是千奇百怪的答案啊,实在搞不懂 */
free(fpr);free(fpw);
fclose(fpw);
}