c语言文件fseek函数 c语言文件fgets( 四 )


表头文件 #includestdio.h
定义函数 int ungetc(int c,FILE * stream);
函数说明 ungetc()将参数c字符写回参数stream所指定的文件流 。这个写回的字符会由下一个读取文件流的函数取得 。
返回值 成功则返回c 字符,若有错误则返回EOF 。
复制代码代码如下:
#include stdio.h
#include stdlib.h
int main()
{
FILE *fp = NULL;
char* str;
char re;
int num = 10;
str = (char*)malloc(100);
//snprintf(str, 10,"test: %s", "0123456789012345678");
// printf("str=%s\n", str);
fp = fopen("/local/test.c","a+");
if (fp==NULL){
printf("Fail to open file\n");
}
//fseek(fp,-1,SEEK_END);
num = ftell(fp);
printf("test file long:%d\n",num);
fscanf(fp,"%s",str);
printf("str = %s\n",str);
printf("test a: %s\n",str);
while ((re=getc(fp))!=EOF){//getc可以用作fgetc用
printf("%c",re);
}
//fread(str,10,10,fp);
fgets(str,100,fp);
printf("test a: %s\n",str);
sprintf(str,"xiewei test is:%s", "ABCDEFGHIGKMNI");
printf("str2=%s\n", str);
//fprintf(fp,"%s\n",str);
fwrite(str,2,10,fp);
num = ftell(fp);
if(str!=NULL){
free(str);
}
fclose(fp);
return 0;
}
C语言关于fseek函数 。中文文件要用TCHAR之类的多字节方法处理 。
你的方法是把中文看成2进制一个字符一个字符的数据文件来处理 , 也是可以的,fseek工作完全正常,
问题是输出字符的显示,你可以显示每个字节的值,但不能显示成肉眼可识别的汉字 。
putchar ( ch ); 可用于 ASCII字符 。
你可以换成: printf("%02x ", 0xffch ); 可以显示单个字节的码值 。从输出的码值可以看出,程序没有问题,只是不能显示成肉眼可识别的汉字 。
另外,如果是unicode中文文件 , 则文件头有不可见的文件类型区分码0xfe 0xff 或 0xff 0xfe 等等 。
2个单个字节码,合成一个双字节码,有大端和小端文件问题,也许需要互相交换相邻2个字节,再显示成中文 。
【c语言文件fseek函数 c语言文件fgets】关于c语言文件fseek函数和c语言文件fgets的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读