关于string和C风格字符串的比较有关问题

关于string和C风格字符串的比较问题1:abcabc//true,这时abc应该说hiC风格字符串类型的2:string s(

关于string和C风格字符串的比较问题
1:
  "abc"=="abc" //true,这时 "abc"应该说hiC风格字符串类型的
2:
  string s("abc");
  s=="abc" //true,此时C风格字符串可以转换为string类型的,也对
3:
  string s("abc");
  (s.c_str())=="abc" //为什么这地方就出错了呢?

[解决办法]
c 风格字符串比较不要用==,用==大部分情况都是错误的。
c++的 string重载了operator==,所有可以用
而3中,c_str()是把string转换成 c风格的字符串,只能用strcmp
类似
char str[]="abc";
str=="abc"一样。
[解决办法]
1.都是常量字符串且相同,因此指针地址也必然相同,因此==
2.str的==判断的是字符串内容,因此也相等
3.s.c_str()不是常量字符串,而"abc"是常量字符串,它们的地址必然不同,因此!=
C字符串内容比较要用strcmp而不是==
[解决办法]
++

探讨
c 风格字符串比较不要用==,用==大部分情况都是错误的。
c++的 string重载了operator==,所有可以用
而3中,c_str()是把string转换成 c风格的字符串,只能用strcmp
类似
char str[]="abc";
str=="abc"一样。

[解决办法]
1和3的比较原理是一致的,都是比较字符串地址。
[解决办法]
这种字符串的比较最好不用这种形式,用strcmp ,string str="abc"; 
str=="abc"之所以能比较 , 是因为重载了==操作符 , 在里面对字符串进行了比较处理
[解决办法]
字符串别用== 没意义
[解决办法]
1. 比较的是两个常量"abc"的地址是否一致,这样的情况两处"abc"的地址是一样的
2. string类重载了==,所以可以用==来比较两个字符串的类容是否相同
3. 比较的是变量s.c_str()和常量"abc"的地址,两个显然不同
[解决办法]
C风格的字符串内容的比较,建议用strcmp函数。