关于 char* 比较的问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 19:24:55
int main()
{
char *t1="123456";
char *t2="123456";
if(t1 == t2)
{
cout << "=" << endl;
}
else
{
cout << "!=" <<endl;
}
}
我认为会输出 != 但是他输出的是 = ;
为什么呢?? 我的系统式 FC 10
"字符串不能这样直接比较" "你的循环结尾没有让两个指针自加1"
什么意思没看懂!!!可以说的详细点吗?

应该跟编译器和系统有关吧。我使用xp,vs2005编译之后得到的是“!=”
====================
tamadexiaot 根本是打胡乱说,都没有好好看代码。
至于字符串比较呢,应该使用strcmp这些函数,而不是使用两个指针的等于。你的理解应该是对的,应该输出"!=",但是偶认为确实跟编译器有关。我的就输出"!="。两个指针的话应该看作是两个不同地址,应该是一个整数,指向不同的位置,数值是应该不同的。

这个基于编译器的实现,不过个人电脑操作系统上大多数的c++编译器能够优化字符串的分配,即相同字符串复用。具体可以自己写程序验证下char*,const char*,string三种类型是否是这样。不过建议如果是作为练习题,最好自己写个程序比较字符串,实现一个与编译器无关的版本,或者使用标准库的string相关方法,因为const char*,char*是不推荐使用的。下面是我实现的一个版本。

bool bCompare(const char *s1,const char* s2)
{
while(true)
{
if((*s1==0||*s2==0)&&(*s1!=*s2))
return false;
else if((*s1==0)&&(*s2==0))
return true;
else{
if(*s1==*s2)
{
s1++;s2++;
}
else
return false;
}
}
}

字符串不能这样直接比较。

你的循环结尾没有让两个指针自加1,