读书人

关于sprintf回学习下

发布时间: 2013-04-02 12:35:26 作者: rapoo

关于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.
这个地方是怎么转的呢,可以说说吗
[解决办法]
引用:
引用:C/C++ code?1sprintf(a,"%d",p);//这句结果不太明白
这句就是将p转化为整型输出,p存储的是S[2]的首地址,也就是0012FAE0化为整型就是1243872.


哦,用计算器转换了下,哈哈对上了,嗯明白了

读书人网 >C++

热点推荐