说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

初学编程,请教个小问题

编辑:说三道四文库 发布时间:2017-11-22 09:17
HTML文档下载 WORD文档下载 PDF文档下载
小弟我刚学了一个多月C语言,最近编了一个文件分割器,碰到了点麻烦,就是找不到文件末尾(反映在非纯文本文件上)。用EOF的方法,往往读到几K就退出,查了下知道为了读取二进制文件,有个feof(fp)的函数,但是居然也没有用,如何解决这个问题,还望大虾指教!


我的filecopy函数代码如下:

int filecopy(FILE *fpin,FILE *fpout,unsigned long int maxlen)    
/*拷贝fpin到fpout,如果到规定大小则退出,指针指向下一个字节*/
{ int c,flag;
unsigned long int i=0;

while((c=getc(fpin))!=EOF){
putc(c,fpout);
                 ++i;
if(i>maxlen-2){
flag=1;
goto end;
}
}
flag=0;
end:
return flag; /*如果文件没有结束,返回1,否则返回0。*/

}

maxlen?
maxlen是分割后文件的长度。
/* EOF.C: This program reads data from a file
 * ten bytes at a time until the end of the
 * file is reached or an error is encountered.
 */
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
void main( void )
{
   int  fh, count, total = 0;
   char buf[10];
   if( (fh = _open( "eof.c", _O_RDONLY )) == - 1 )
   {
        perror( "Open failed");
        exit( 1 );
   }
   /* Cycle until end of file reached: */
   while( !_eof( fh ) )
   {
      /* Attempt to read in 10 bytes: */
      if( (count = _read( fh, buf, 10 )) == -1 )
      {
         perror( "Read error" );
         break;
      }
      /* Total actual bytes read */
      total += count;
   }
   printf( "Number of bytes read = %d\n", total );
   _close( fh );
}
可以看看这个。
谢谢!这样真的可以读完文件,但是能不能烦劳讲解一下?我有很多看不明白的地方。

#include <io.h>
#include <fcntl.h>     //这两个头文件分别包含了什么函数?io.h和stdio.h的不同?
#include <stdio.h>
#include <stdlib.h>
void main( void )
{
   int  fh, count, total = 0;
   char buf[10];
   if( (fh = _open( "eof.c", _O_RDONLY )) == - 1 )   //_open的调用方法?为什么它  返回的是int值?这个fh代表的是什么?_O_RDONLY是什么意思?
   {
        perror( "Open failed");
        exit( 1 );
   }
   /* Cycle until end of file reached: */
   while( !_eof( fh ) )           //同上,不太明白fh的意思,_eof和feof有什么不一样?
   {
      /* Attempt to read in 10 bytes: */
      if( (count = _read( fh, buf, 10 )) == -1 )   //_read的意思,调用方法,返回值
      {
         perror( "Read error" );
         break;
      }
      /* Total actual bytes read */
      total += count;
   }
   printf( "Number of bytes read = %d\n", total );
   _close( fh );
}

这里的很多函数,包括头文件我的书(教材《C程序设计》(谭浩强)、《The C Programming Language》(K&R))里都没有,这些是不是ANSI标准的?是不是标准的C语法(或是C++)?我刚学C语言,不想把概念搞混淆了,其实现在我已经挺糊涂了。:)


又出了点问题,我在用这段代码改编一个实验性程序的时候,发现读出的数据有些不对,比如我有一个4.65M的a.rm,读出后为4.66M,播放器不能播放。请问问题何在。

#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
void main( void )
{
   int  fin,fout, count, total = 0;

   char buf[10];
   if( (fin = open( "cs.rm", _O_RDONLY )) == - 1 )
   {
        perror( "Open failed");
        exit( 1 );
   }
   if( (fout = open( "a.rm", _O_CREAT | _O_WRONLY )) == - 1 )
   {
        perror( "Open failed");
        exit( 2 );
   }

   /* Cycle until end of file reached: */
   while( !eof( fin ) )
   {
      /* Attempt to read in 10 bytes: */
      if( (count = read( fin, buf, 10)) == -1 )
      {
         perror( "Read error" );
         break;
      }
      /* Total actual bytes read */

  total += count;
  _write( fout, buf, 10);       /* Copy buffer to fout*/
   }
   printf( "Number of bytes copied = %d\n", total );

   close( fin );
   close( fout);
}

up
难道没有人回答吗?!我又碰到一个问题,同样的程序,我将buf设成不同的容量为什么会得到不同的total值?比如buf[10]的时候total==47000,buf[200]的时候total==3XXXX
up
你挺厉害的嘛,才学了一个月就学会这么多呀,我学了一个月才刚刚能看懂别人编的程序,你现在就能写了,叫我好声佩服,你在哪里学的,我们可以交个朋友吗?  我的QQ182278155
果然厉害.
并不是说厉害,学习就是要写程序的呀,我喜欢一边写一边进行学习,这样容易发现问题,学到东西。还有,多看点书,我都是两三本书一起看。最后,我原来的程序是我自己写的,后来那个(第六贴)的是MSDN上的:)我自己改了改,看起来要比我原来那个好多了:)
上面用到的好象是WINDOWS的一些API,具体的你可以去查一下WINDOWS API 的一些书籍
初学者too,UP一下!~
我希望用C就能解决这个问题,如果用到API的话,我的问题岂不是没有意义了?我就是想学到点东西,而且我现在离解决很进了……(只是在拷贝的时候多了0.01M呀……)就差哪位高手点拨一下了……而且微软的东西太没保障了,今天学了,明天他推出一个全新的东西就把你以前的全推翻了……还是学C比较好,通用性强,又可以为学别的语言打下很好的基础
千兆的带宽是不够的,最新研究将我们带入400G时代! 告诉你一个事实:移动互联网依然不大 一切才刚刚开始 戴尔的10亿美元云扩建计划到底是什么? iOS vs. Android,应用设计该如何对症下药? 扁平化设计五大原则 16种折磨开发者的方式 2013年度中国优秀开源项目征集活动正式启动 技术趋势:产品设计向“钱”看 服务器领域:旧时代已过 新时代正在降临 速度与金钱的碰撞:F1赛车将搭上大数据的东风 中国&#183;北京第一届开源大会Hadoop专场侧记:Hadoop已经成为大数据分析平台的标配 Marissa Mayer为何带雅虎重回门户时代? 开发者最爱的三款开发工具 Facebook开源JavaScript库:React 硬件天堂深圳行:从Seeed Studio、Knewone到柴火创客空间 消费应用开发难赚钱?做个企业app store吧 开发开源软件的智慧:够简单,很好用 历届中国云计算大会PPT集萃(终章):架构到实践的全面解析 透过现象看本质:详谈数据可视化 专家观点:HTML5无法彻底抹杀Native应用 Google地图工程主管Raj Shah跳槽至微软在线服务部门 微软证实Windows 8.1引入类“开始”按钮 系统6月26日开放下载 PHP开发者意向调查:移动开发+云服务成为焦点 研发周报:16种折磨开发者的方式 移动周报:Jolla和Sailfish OS,那些你应该知道的事儿 优化技巧分享:把内存消耗降低至原来的1/20 85后程序员:独自一人,完成一个HTML5开源图形库 关于Waze的前世今生,你所不知道的事 代码审查——提高代码质量的终极武器 值得开发者关注的8个HTML5 API 最初设计方案大公开!LINE STAMP 贴图诞生记 如何清除ds.tables中的数据 奇怪!用unescape函数解码出来的一部分字符只能用document.write()的方法来显示? 求救!!!!如果我是定向招生读的大学,和定向单位签订11年和约,如果我不想去定向单位工作,该负怎样的法律责任!!!! 冬天来了,春天还会远吗?——中国程序员的春天 请教无标题窗口怎么移动?? 听同学说用一个按钮可以实现后退两页的,那么三页也可以实现吧,怎样写? 用hibernate 如何实现分页 我不太明白这些版本控制到底最大的好处是什么? 程序运行时实时变量出错? 各位老兄,请问在java中怎么解决这样<Node Name="N1" Value="1" />的XML 哪有winamp3的“汉化补丁”,源程序我有 使用CSocket类时出现访问冲突 庆祝网站初建:一般的界面,实用的文章例子,欢迎大家参观我的网站http://vcp4.51.net 帮帮小弟吧~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 请教各位大侠:VFP中SQL语言应该怎么学?? 如何自行编写一个自释放的EXE文件?,分不够,可另开恭送 dll卸除时 我要做一些收尾工作 代码要写在哪里?? 请教各位大侠:VFP 中的程序应该怎么学???谢谢指教!! 如何修改Canon BJ-4650打印机驱动程序,实现A3纸的加长打印? 心语 使用ODBC连接MySQL数据库时在stderr处有错误输出 这样的函数名怎么调用 大家能说说你们看过的最吓人的恐怖片是哪一部么?欢迎讨论! WIN2K问题 怎样解决这个问题 两个很菜的问题,在线等待 我不能在WSADV5中显示JSP页面? 鼠标检测问题 仅运行一次的实例,如何分别打开多个文件? 一些对asp.net的编译问题,乞望大虾回答。 初学者问题,请各位高手教教我! 通过ODBC传输大容量数据时出错 一个小的测试:求1+2+……+100的和,写出你的程序! 谁有不错的JAVASCRIPT的电子教程? 请教各位大侠:TurboC的数组方面的题 请问为什么我这个实现不了旋转? 送分给高手,请进:关于组件注册的问题? 对于您可能这仅是一个小问题,急求助! 如何收集一堆的单选框的值 关于一个程序的想法,高手进来给点建议! QQ与手机(没分给) 关于音量控制的问题 如何获得SMTP服务器的IP地址 C语言的图形系统设计 怎样屏蔽TStringGrid中的方向键?请指点。先谢了! 我找了10天了,也没找到答案 关于vb.net中文本框的字体, 请赐教 请问怎样实现在发邮件时,添加附件的时候 一点“Browser”按钮,找到您所要粘贴的附件文件: 然后立刻粘贴在左边的框上?? 有谁装过phpnuke???我遇到了问题 关于控件大小的问题!!!!急盼回复!!! 2003有什么关机软件? 两道线性代数题,希望错误选项稍作分析,多些, 所有集合都含有空集应该怎么理解好呢? 如果一个集合里有空集那么这个集合是不是空集如图,这个对不对 线性代数 第10题和第12题证明题给过程即采纳 哪怕一个小小的火柴,对她也是有好处的!改成反问句 ‘驽骍难得’是啥意思?堂吉诃德里的一词 保时捷911高手请进!这是911什么型号? 堂·吉诃德 好词成语 三个白字叠在一起的是什么字来的?怎么输入和注音? 白字下面加个本是什么字 华盛顿会议给中国带来了什么? 纽约股市三大股指24日上涨报收埃及又一次缩短宵禁时间人民币即期汇率连破四关口 逼近“5时七部委9负责人“应考”科技经费使用北京地铁10号线一个月故障五回 官方南宁:警方在拆违现场遇暴力抗法被迫用美“杀死中国人”节目被删 万人在白宫北京脖颈卡护栏女子恢复呼吸 丈夫否认印度少女回家途中遭轮奸 事后遭歹徒焚沈阳“土豪别墅”未批先建 系村委会主部分赣南脐橙由青果催熟 染色打蜡后上别糊涂!未来30年香港对中国意义何在最穷无非讨饭,不死终会出头 (好文)突发重磅!证监会主席换人了,新主席第各地养老保险并轨方案已出齐,你的工资马云:细节好的人格局一般都差未来A股市场的五大特征2016年有哪些牛逼的赚钱新点子,别霸气外露,锋芒毕现——网件R85002016年有哪些牛逼的赚钱新点子,别突发重磅,肖刚被免!历任证监会主席上看懂都会赚,2016几大投资机会
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘