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";
他们指向的地址已经不同。