关于sprintf回学习下
关于sprintf来学习下int*pintS[2]{1,2}pS//p:0012FAE0[0] 1(0x0000001)chara[100]{0}charb[100]{0
关于sprintf来学习下
int*p;
intS[2]={1,2};
p=S;
//p:0012FAE0 [0] 1(0x0000001)
chara[100]={0};
charb[100]={0};
sprintf(a,"%d",p); //a "1243872\0\0\0..."
sprintf(b,"%s",p); //b "\x01\0\0..."
为什么a里面是p的地址,b的是p所指向的内容。
[解决办法]格式描述和对应的实参要匹配,否后果不堪设想。
//NG
//sprintf(a,"%d",p);
sprintf(a,"%p",p);
[解决办法]参考sprintf源代码。
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
单步sprintf对应的汇编指令几句,就会来到sprintf的C源代码处。
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
[解决办法]sprintf是个很有用的函数
[解决办法]b是p指向的内容吗??p是一个int类型的指针,直接以十进制整型输出p的值那就是p的内容(地址),以字符串形式输出p的值是什么呢?
[解决办法]用sprintf不是个好习惯,得用snprintf
[解决办法]
sprintf(a,"%d",p);//这句结果不太明白
[解决办法]也就是0012FAE0化为整型就是1243872.
这个地方是怎么转的呢,可以说说吗
[解决办法]哦,用计算器转换了下,哈哈对上了,嗯明白了