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