C语言或OC或C++ 中英文混合的文件读取前3个字符怎么做?

1.txt文件内容:你好a,我是千叶!
期望结果:你好a
C#include
main()
{
FILE*fp;
fp=fopen("1.txt","r");
charx[1000];
fread(x,sizeof(char),7,fp);//length=7,对于现在的1.txt结果正确,如果1.txt变成纯中文的文件,第三个汉字就会被截断,请问要怎么处理呢?
printf("%s",x);
}
====================================================================================
我的场景是文件比较大,不太想把整个文件读取到NSData或者NSString,所以希望NSData读取部分数据,再转化成NSString,于是就遇到了中文字符截取出现问题的情况。看了大家的回答,发现这个问题可能是个伪命题,毕竟文件的偏移是按字节算的不会去考虑文件字符编码。
之前提了一个问题在Object-c节点,没有人回答所以想看看用C能不能解决,原问题:http://segmentfault.com/q/1010000002530834?_ea=128095
ITMISS
浏览 392回答 2
2回答

缥缈止盈

提供个思路:读取文件,你必须知道字符编码生成NSString对象,NSString有个初始化方法是initWithData:encoding:,然后NSData有个初始化方法是dataWithContentsOfFile:确保步轴2正常生成对象后,调用NSString的成员方法:substringWithRange:进行截取希望能帮到lz

桃花长相依

问题的重点在于:ANSI编码的条件下,一个汉字占两个字节,一个英文字符占一个字节。那么对于你说的例子://1.txt你好a,我是千叶!^^^^^//"你好a",数一数,是5个字节。所以如果你想截取"你好a",那么使用:cfread(x,sizeof(char),5,fp);printf("%s\n",x);//输出"你好a"如果全是中文,例如://1.txt你好啊,我是千叶!^^^^^^//三个汉字是6个字节那么你如果想要汉字不被截断,至少应该读取偶数个字节。cfread(x,sizeof(char),6,fp);printf("%s\n",x);//输出"你好啊"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript