全部博文(1293)
分类:
2012-10-31 20:59:51
一、案例代码
二、操作及运行效果
[root@localhost printTotxt]# vim test.txt
正常写入语句 fwrite(string,sizeof(char),strlen(string),fp);txt文件的显示效果。
如果改为
fwrite(string,sizeof(char),strlen(string)+1,fp);
就会出现下面的图示,说明字符串的’\0’被写进了文本文件
如果直接先操作
fread(read_buf,1,len_read,fp);然后
printf("%s\n",read_buf);则只能输出第一个Name 3 ,因为读到第一个'\0'就断开了。
故对于读写文件,上面代码的做法为合理的写法。主要步骤为:
(1)、fwrite(string,sizeof(char),strlen(string),fp); 写数据时不用写‘\0’到文本;
(2)、读的时候,读完后再加一个’\0’。如果不加,这样输出时才有可能出现乱码。
fread(read_buf,1,len_read,fp);
read_buf[len_read] = '\0'; // Very important
printf("%s\n",read_buf);
三、相关接口函数说明
1、linux调用系统函数产生随机数,需要将srand(),rand()两个函数合并使用。
srand(),返回值为void;rand(),返回值为随机数。
单独使用Rand(),每次返回的值都一样。必须先用srand(),用它的参数对随机数产生器进行初始化。常用技巧为使用时间做为随机数产生器的种seed,即srand(unsigned int)time(0))。
2、fopen,fwrite,fread,fseek,fclose等文件操作函数简介
(1)、fp = fopen("test.txt","w+");
//注意打开的方式 为w+而不是w,请分析原因。
r 以方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个,允许读数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。(注意,这个时候调用fread,是无法读出数据的)
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。(注意,这个时候调用fread,是可以读出数据)
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
(2)、fwrite(buf,sizeof(char),strlen(string),fp),将buf中的数据写到fp中
代码段:
sprintf(buf,"Name %d ",k);
fwrite(buf,sizeof(char),strlen(buf),fp)
buf : 数据读出的缓冲区;
sizeof(char) :每个元素的大小;
count : 要读多少个元素;
(3)、fread() 读数据;
fread(read_buf,1,len_read,fp);
将fp中的数据读出到read_buf中。
(4)、rewind 和 fseek(fp,0L,SEEK_END)
/* seek to the beginning of the file */ rewind(fp); // <=> fseek(fp,0,SEEK_SET);
(5)、len_read = ftell(fp),获取文本的大小。