将一个文本文件内容反序打印出来(包含中文时)

原贴:http://topic.csdn.net/u/20090428/16/29e6157d-df3c-4762-9b3d-230b205b0828.html

 

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #include <assert.h> #include <errno.h> char* read_file(char*filename); char* text_reverse(const char* textptr); int main() { char* str=read_file("text.txt"); /* text.txt是当前目录下的文件,内容有中文英文 */ char* ptr=text_reverse(str); printf("%s/n",ptr); return 0; } char* read_file(char*filename) { FILE* fp; long len; char* buf; if((fp=fopen(filename,"rb")) == NULL) { perror("fail to open file!"); exit(1); } fseek(fp,0,SEEK_END); len=ftell(fp); rewind(fp); buf=(char*)malloc(len*sizeof(char)+1); fread(buf,len,1,fp); *(buf+len)='/0'; fclose(fp); return buf; } char* text_reverse(const char* textptr) { static char* revptr; char* ptr1; char* ptr2; int textlen; textlen=strlen(textptr); ptr2=(char*)malloc(textlen*sizeof(char)+1); assert(ptr2!=NULL); ptr1=(char*)(textptr+textlen-1); revptr=ptr2; while(textlen--) { if(*ptr1 < (unsigned )128) *ptr2=*ptr1; else { *ptr2=*(ptr1-1); ptr2++; *ptr2=*ptr1; ptr1--; } ptr2++; ptr1--; } *ptr2='/0'; return revptr; }

你可能感兴趣的:(File,null,FP)