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

请问fread怎样遍历把读到的内容?多谢

2012-12-23 
请教fread怎样遍历把读到的内容?谢谢如下程序,fread保存到了pbuf ?能对 pbuf遍历么?是否必须把pbuf赋值给

请教fread怎样遍历把读到的内容?谢谢
如下程序,fread保存到了pbuf ?
能对 pbuf遍历么?
是否必须把pbuf赋值给一个字符串数组?最好别这样
直接遍历一个字符一个字符的pbuf并做一些判断可以吗?
不想赋值2次。多谢啊

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <fcntl.h>
#include <unistd.h>
#define  BUFSIZE 10000000

int main()
{
FILE *file;
file = fopen("test.txt","rb");
  char *pbuf = (char *)malloc(10000000);
memset(pbuf, 0, 10000000);
fread(pbuf,1,10000000,file);
return;
}
[最优解释]


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <fcntl.h>
#include <unistd.h>
#define  BUFSIZE 10000000

int main()
{
    FILE *file;
    file = fopen("test.txt","rb");
    char *pbuf = (char *)malloc(10000000);
    memset(pbuf, 0, 10000000);
    int rdLen = fread(pbuf,1,10000000,file);
    //------------------ 遍历读取到的数据
    for(int i=0; i<rdLen; ++i)
    {
        
        if( pbuf[i] == 1) ;
        
    }
    if(pbuf) free(pbuf);
    //-------------------
    return 0;
}

[其他解释]
首先,不是把fread保存到了pbuf中,而是读取数据到pbuf中。
第二,都是读到内存了,怎么不能操作?
第三,自己看一下fread的函数原型就知道了,不是必须为char* 任何的缓冲区都是可以的。
第四,不是到内存了么,做你想做的事!

自己动手调试一下和看一下基础。
[其他解释]
fread的返回值为读入的字节数,之后根据这个大小你就可以遍历pbuf了.
[其他解释]
最好判断一下,你的文件打开是否成功,还有你的这个pbuf是否申请空间成功。一下子申请这么长的空间,我感觉没有必要,你完全可以分批分次的去读取文件内容,然后再pbuf里遍历,之后再赋值是可以的。
[其他解释]
你这个程序还有些问题呢, 
首先fopen没有判断是否打开成功. 
再有结束时没有关闭文件.

因为你是rb方式打开文件的, 读取回来的就是你文件中保存的实际数据.
如果你输入txt中的是123456这样的串, 那么应该pbuf中保存的就是: 0x30 0x31 ...这样的一个数据,
可以直接使用 %C输出成字符.  
for(int i=0; i<rdLen; ++i)
    {
         
        printf("%c",pbuf[i]) ;
         
    }
[其他解释]
我不知道怎么遍历啊
[其他解释]
网上的例子一大推,read fread。。。可以查一下glibc
[其他解释]
引用:
C/C++ code??



1234567891011121314151617181920212223242526

#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <fcntl.h> #include <unistd.h> #define  BUFSIZE 10000000   int ma……


多谢啊,但是可以从字符串pbuf的尾部,也就是from end to start遍历吗?
另外只能一个字节一个字节的遍历,不能以字符为单位遍历啊?
多谢了
[其他解释]

引用:
网上的例子一大推,read fread。。。可以查一下glibc

read函数,在网上找的例子没有一个好用的郁闷
[其他解释]
引用:
C/C++ code??



1234567891011121314151617181920212223242526

#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <fcntl.h> #include <unistd.h> #define  BUFSIZE 10000000   int ma……

不对啊,你这样好像文件内容啥都没读进来,如果我int rdlen去掉,就报错了。
好像只是读了个文件长度?

[其他解释]
fread是返回实际读取的数据长度. 如果成功的话, 具体看fread的函数说明.

热点排行