首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

文件的存贮方式解决方法

2012-02-07 
文件的存贮方式假若我在文件中输入了以下数据abcdefghijklmnopqrst那么它是怎么存放的?我用了一个小程序测

文件的存贮方式
假若我在文件中输入了以下数据
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

热点排行