字符串比较
#include<iostream>
using namespace std;
//-------------------------------------
int main(){
cout<<("join"=="join" ? "" : "not ")<<"equal\n"; // 直接字面值比较
char* str1="good";
char* str2="good";
cout<<(str1==str2 ? "" : "not ")<<"equal\n"; // 字符指针比较
char buffer1[6]="Hello";
char buffer2[6]="Hello";
cout<<(buffer1==buffer2 ? "" : "not ")<<"equal\n"; // 字符数组比较
}//====================================
以上代码书上说输出
not equal
not equal
not equal
但是我在vc6里运行了,结果是
equal
equal
not equal
我不知道是什么原因,请教!
问题点数:20、回复次数:13Top
1 楼zenny_chen(ACE Intercessor)回复于 2006-03-03 23:08:09 得分 0
编译器优化了。
Top
2 楼lei001(太极)回复于 2006-03-03 23:25:35 得分 0
应该是编译器的问题Top
3 楼steedhorse(晨星)回复于 2006-03-03 23:40:29 得分 0
同样的字面常量字符串的存储,这个现在很少有编译器不做优化了。Top
4 楼Kenmark(fenix)回复于 2006-03-04 13:00:37 得分 0
编译器进行了优化,同样的常量字符串使用了同一个地址,节省了内存空间Top
5 楼Kenmark(fenix)回复于 2006-03-04 13:00:50 得分 0
现在一般都 不用了Top
6 楼rabbit729(无名胜有名)回复于 2006-03-04 13:21:35 得分 0
最好还是利用strcmpy(str1,str2)进行比较,如果是string对象的话,可以直接利用"=="等逻辑比较符。Top
7 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-03-04 15:01:23 得分 0
cout<<("join"=="join" ? "" : "not ")<<"equal\n"; // 直接字面值比较
char* str1="good";
char* str2="good";
cout<<(str1==str2 ? "" : "not ")<<"equal\n"; // 字符指针比较
char buffer1[6]="Hello";
char buffer2[6]="Hello";
cout<<(buffer1==buffer2 ? "" : "not ")<<"equal\n"; // 字符数组比较
??????? 晕,字符串还可以这样比较?
确切的说,上面的都不叫“字符串比较”,充其量就是char指针比较。
BE CAREFUL:字符串比较 != char指针比较
Top
8 楼manplus(魅力加加)回复于 2006-03-04 15:32:00 得分 0
学习Top
9 楼ugg(逸学堂(exuetang.net))回复于 2006-03-04 21:16:18 得分 0
VC编译器吧。
char* str1="good";
char* str2="good";
因为编译器默认把给指针赋值变量定为const类型,是不可修改的。
有因为str1,2值相同。所以,在内存中就用一个字符串Top
10 楼MartenChan(蝎子)回复于 2006-03-05 19:40:40 得分 0
编译器处理了......Top
11 楼zh2817()回复于 2006-03-05 20:36:59 得分 0
除编译器
我认为主要还有一个在内存里的存储地址问题Top
12 楼sunguang13(haha)回复于 2006-03-06 09:30:10 得分 0
我以前也遇到过该问题,你可以看看你的编译器有什么问题没!Top
13 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-06 09:38:18 得分 0
字面常量编译后是放在数据段中的,
相同的值出现多次也只会在数据段中保存一份,
上面的指针只是指向这个数据段中对应的位置Top




