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 "; // 字符数组比较
则强制生成了两份拷贝