C语言从txt中读取汉字到数组

我从D:\\mini.txt中读取一个汉字“我”到数组中,为什么这样不行?若想读取一段汉字怎么改?谢谢了
#include <stdio.h>
main()
{
FILE *fp;
char ch[100];
char temp;
int i=0;

fp=fopen("D:\\mini.txt","r");

while(!feof(fp))
{
temp=fgetc(fp);
ch[i++]=temp;

printf( "%c%c ",ch[i],ch[i+1]);
}

getch();

}

汉字在ANSI/GBK或UCS-2/UTF-16编码中占2个字节,在UTF-8中占3个字节,在UCS-4/UTF-32中占4个字节。如果确定编码(默认一般是ANSI/GBK)的话,就可以判断出一个汉字的大小。由于fgetc只能处理单字节数据,且char无法存放超过一个字节,因此应该把汉字(无论是几个)作为数组处理。具体可以用fread(s,n,1,fp);来从文件fp读入指定的n字节到字符串s中。也可以用fscanf配合%s使用。读入一行的话,可以考虑fgets。
对于宽字符而言,可以用wchar_t代替char,用fgetwc代替fgetc。不过wchar_t和对应函数的行为是平台相关的,一般也不适合ANSI/GBK兼容窄字符串处理。
====
[原创回答团]

参考资料:原创

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-05
// fgetc(fp);一次只能读一个字符,读汉字得两个字符
//
//呃。。方法很麻烦啊很麻烦。。希望有高人指点
#include "stdafx.h"
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
FILE *fp;
char ch[100];
int temp;

fp=fopen("D:\\mini.txt","r");

int k=0;
while(k<100)
{

fread(ch+k,2,1,fp);
printf("%c%c",ch[k],ch[k+1]);
k=k+2;
fseek(fp, k, 0);

if(fread(ch,2L,1,fp)!=1)//如果读到结尾了就退出
{
break;
}
else
{
fseek(fp, -2, 1);
}
}
return 0;
}
第2个回答  2010-06-05
汉字是占2个字节的,既然你要读一段汉字,为什么不用fread,方法如下fread(ch,100,1,fp);
相似回答