C串的有关问题
C串的问题
C++教材中说C串不能直接比较,并给出了一个程序:
#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.0下运行上面的程序结果怎么是
equal
equal
not equal
怎么回事啊?请各位高手指点。
------解决方案--------------------
你看的什么C++教材啊?
直接比较C的字符串常量是会导致某些问题。
显然教材上给的答案是理论化的。
------解决方案--------------------
直接比较字符串,即是比较的其地址.相同的字符串,其地址不一定相同,这依赖于编译器.
------解决方案--------------------
理论上是这样的,需要生成两份 "good "
equal的原因是编译器进行了优化,在你char* str2= "good ";
的时候,它发现可以直接把str2指向已有的 "good ",节省了空间,所以是equal
而 char buffer1[6]= "Hello ";
char buffer2[6]= "Hello ";
cout < <(buffer1==buffer2 ? " " : "not ") < < "equal\n "; // 字符数组比较
则强制生成了两份拷贝
C++教材中说C串不能直接比较,并给出了一个程序:
#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.0下运行上面的程序结果怎么是
equal
equal
not equal
怎么回事啊?请各位高手指点。
------解决方案--------------------
你看的什么C++教材啊?
直接比较C的字符串常量是会导致某些问题。
显然教材上给的答案是理论化的。
------解决方案--------------------
直接比较字符串,即是比较的其地址.相同的字符串,其地址不一定相同,这依赖于编译器.
------解决方案--------------------
理论上是这样的,需要生成两份 "good "
equal的原因是编译器进行了优化,在你char* str2= "good ";
的时候,它发现可以直接把str2指向已有的 "good ",节省了空间,所以是equal
而 char buffer1[6]= "Hello ";
char buffer2[6]= "Hello ";
cout < <(buffer1==buffer2 ? " " : "not ") < < "equal\n "; // 字符数组比较
则强制生成了两份拷贝