读书人

文件的存贮方式解决方法

发布时间: 2012-02-07 17:45:36 作者: rapoo

文件的存贮方式
假若我在文件中输入了以下数据
abc
def
ghi
jklmn

opqrst
那么它是怎么存放的?
我用了一个小程序测试了一下,发现返回的文件长度是30!
为了知道这30个都有哪些,我又把依次把每个字符的asci码输出,发现竟然有31个!!
文件是怎么存放的啊?
程序如下;

#include <stdarg.h>
#include <stdio.h>
#include <io.h>
#include <string.h>
void main()
{
char str1[256]={0};
char str2[256]={0};
FILE *fp=fopen( "debug.txt ", "r ");
int f=_open( "debug.txt ", 0);
int DataLen=_filelength( f);
_close(f);
fread( str2, DataLen, 1, fp);
strcpy(str1,str2);
for(int i = 0; i <=DataLen; i ++)
{
//if(str2[i]== '\n ')
//{
//printf( "\\n ");
//i++;
//}
//if(str2[i]== '\0 ')
//{
//printf( "\\0 ");
//i++;
// }
printf( " %d ",str2[i]);
}
printf( "\n%d\n ",DataLen);
}

[解决办法]
for(int i = 0; i <=DataLen; i ++) <= 如果DataLen表示的是文件长度的话,lz在这里用了 <=。
当DataLen=30时,循环会执行31一次。-.-! 所以就会打印出31个了。
[解决办法]
abc
def
ghi
jklmn

opqrst
如果是ascci则每个字符占一个字节,(unicode则每个字符占二个字节).abc后面包含了2个字节,分别是\r\n(在windows下)接着就是def依此内推!最后一行没有\r\n,一个为30个字节,至于为什么打出来31个如WizardLucien()所说的那样了!~
[解决办法]
晕了for(int i = 0; i <=DataLen; i ++),共循环了DateLen - 0 + 1次啊,这个程序中也就是31次了,程序一开始定义char str2[256]={0};也就是str2数组中每个元素的值都为0了,str2[30]也为0,所以多输出个0

读书人网 >C++

热点推荐