首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

sprintf 见鬼啦,该如何解决

2012-02-16 
sprintf见鬼啦用sprinft的时候真是见鬼了但是还目前还不清楚是不是这个函数的原因,但是感觉和这个有很大的

sprintf 见鬼啦
用sprinft的时候真是见鬼了 但是还目前还不清楚是不是这个函数的原因,但是感觉和这个有很大的关系  


char *temp="";
//string temp;
char p[20];

for(int i=0;i<2;++i)
{

if(i==0)
sprintf(p,"%s","zhuangchaoxiao");
else
sprintf(p,"%s","maomao");

cout<<"temp: "<<temp<<endl
<<"p: "<<p<<endl;

temp=p;
cout<<"temp: "<<temp<<endl
<<"p: "<<p<<endl;

}

按道理说这个应该输出的是:

temp:
p: zhuangchaoxiao
temp: zhuangchaoxiao
p:zhuangchaoxiao
temp: zhuangchaoxiao
p: maomao
temp: maomao
p: maomao  

可是输出的却是:
temp:
p: zhuangchaoxiao
temp: zhuangchaoxiao
p:zhuangchaoxiao
temp: maomao
p: maomao
temp: maomao
p: maomao  


由第5行可以明白地看出 sprintf里面的值不是赋给p而是给temp的  

还有 如果 把char *temp="";换成 string temp; 就正常了  
这到底是怎么回事啊 写了这么多代码 还从来没有遇到过这样的事情啊  


[解决办法]
和sprintf没什么关系
temp=p;该语句后
temp指向p
p被修改,自然temp输出的也不同。

[解决办法]
输出的是:

temp:
p: zhuangchaoxiao
temp: zhuangchaoxiao
p: zhuangchaoxiao
temp: zhuangxhaoxiao
p: Ilovemaomao 


这个结果正常的。。
p和temp本来就是两个不同的指针变量,各自指向各自的地址
p="Ilovemaomao"; 
"Ilovemaomao"返回字符串的首地址,然后赋值给p,所以p指向了这个字符串
temp的值没变,仍然指向原来的字符串

[解决办法]
你先理解好temp,p各自指向的地址
还有该地址的内容

char *temp=""; 
char *p="zhuangchaoxiao"; 
temp=p; 
----
此时temp和p都指向常量字符串"zhuangchaoxiao"; 

p="Ilovemaomao";
---
p指向常量字符串"Ilovemaomao";

他们指向的地址已经不同。


热点排行