C|文件写、读(读到字符数组、指针)及如何避免垃圾数据
文件可以读入到字符数组,也可以读入到动态分配的字符指针等数据结构中,需要注意的是,如果数组的长度或动态分配的长度与文件的长度不一致时,需要注意保存文件内容的数据结构初始化为0值,避免垃圾数据的存在,因为字符串是未尾元素为“\0”的字符数组。
细节请见小实例中的代码备注及注销掉的代码:
以下是是否有使用memset()函数将数据结构初始化为0值的不同运行效果:
附代码:
#include<windows.h> #include <string> int flen(char* fpath) // file length { FILE *fp; fp = fopen(fpath,"r"); fseek(fp,0,SEEK_END); // 把文件指针移到文件末尾 int n = ftell(fp); // 得到文件长度 rewind(fp); // 把指针移回文件头 fseek(pFile,0,SEEK_BEGIN) return n; } void fw(char* fpath) // write file { FILE *fp; fp = fopen(fpath,"w"); fwrite("hi,\n\r",1,strlen("hi,\n\r"),fp); char *chs = "test text字符测试"; fwrite(chs,1,strlen(chs),fp); //fwrite(chs,1,strlen(chs)+1,fp); // 最后一个fwrite多写入一个空字符,以在后面读取时避免垃圾数据 fclose(fp); } void fr(char* fpath) // read file to a char[] { FILE *fp; fp = fopen(fpath,"r"); char chs[100]; //char chs[100]="0"; // 数组被赋值为全零,防止写入垃圾数据, memset(chs,0,100); // 把数组赋为全零的另一种方法 fread(chs,1,100,fp); MessageBox(NULL,chs,"fr",NULL); fclose(fp); } void fr2(char* fpath) // read file2 to a char* (dynamic allocate) { FILE *fp; fp = fopen(fpath,"r"); int n = flen(fpath); //char *pbuf = new char[n]; char *pbuf = (char*)malloc(sizeof(char)*n); memset(pbuf,0,n); // 把数组赋为全零的另一种方法 fread(pbuf,1,n,fp); MessageBox(NULL,pbuf,"fr2",NULL); fclose(fp); //delete pbuf; free(pbuf); } int main() { char *fpath = "test.txt"; fw(fpath); fr(fpath); fr2(fpath); return 0; }
—End—
请先 后发表评论~