当前位置: 代码迷 >> C语言 >> 关于printf函数的格式符问题
  详细解决方案

关于printf函数的格式符问题

热度:338   发布时间:2008-03-12 14:01:33.0
关于printf函数的格式符问题
一个关于引导扇区数据的提取:不过提取出来的结果跟用DISKEDIT.EXE提取出来的不一样.一般是算法出现在错误
    请大家帮我解释一下这段码:
  我把代码附上:
#include   <dos.h>
#include   <stdio.h>
#include   <alloc.h>

  int   main()   
  {   
              union   REGS   i,o;//定义联合体 寄存器  i,o
              struct   SREGS   es;   
              FILE   *   f;   
          char *s=(char*)malloc(512);    //s是由远堆分配的指针,是个带段地址:偏移量的指针
          i.h.ah=0x02;//赋值初始化,等同于汇编的ah=ox02为入口参数指定功能号;
              i.h.al=1;   //h表示byteregs,AL为要读取的扇区数;
              i.h.ch=0;   
              i.h.cl=1;   //CL高2位+CH=柱面号,CL低6位=扇区号;
              i.h.dh=0;   //DH磁头号;
              i.h.dl=0x80;   //DL表示磁盘号;
              i.x.bx=(unsigned   short)s; //x表示wordregs
              es.es=FP_SEG(s);   //第一个es表示定义的段寄存器,第二个es表示sregs中的一个体结构.函数是获取远指针*S段地址的值。
   
CS:BX=存放读取数据的内存缓冲地址~~~~出口参数:CS:BX=读取数据存放地址~~~错误信息:如果出错CF=1 AH=错误代码


              printf("   s=%Fp,SS=%x,DS=%x,ES=%x",s,_SS,_DS,_ES);   
   
              int86x(0x13,&i,&o,&es);   
              f=fopen("C:\\Partable.bin","w+b");   
              fwrite(s,512,1,f); 写入数据块的地址,数据块的大小,数据块的数目,指定要写入的文件  
              fclose(f);   
              free(s);   
  }
我还想问一下,关于printf函数中的s=%Fp这个格式符的意思.
搜索更多相关的解决方案: 符问题  printf  函数  格式  

----------------解决方案--------------------------------------------------------
没有人回答。希望各位高手帮帮忙,我找了一周的资料,查了很多的信息,不管是对是错,大家一起说出来讨论给我个思考方向也是万分的感谢!!!小弟在此谢过了~~~
----------------解决方案--------------------------------------------------------
我想你那个F是不是原来资料问题啊! 把F去掉为显示地址呀.
printf("%p",a);
----------------解决方案--------------------------------------------------------
但是程序可以运行,只是结果不正确,%P是显示指针的地址,我想%Fp会不会是显示远指针的地址,不过资料查不到。。。嘿嘿。。。
继续努力探索…^-^
----------------解决方案--------------------------------------------------------
问题己解决,由于该程序编译后受系统保护机制和内存分配机制等因素的影响,所以不能读取硬盘主引导扇区的数据.但是可以在DOS里面读取出来.
----------------解决方案--------------------------------------------------------
  相关解决方案