请教前辈关于memcmp()的一个疑惑,太奇怪了

xiaolongren1989 2013-01-04 04:23:34
#include <string>
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
string a = "aaa";
string b = "bbb";
cout << memcmp(&a, &b, a.size()) << endl;
system("pause");
return 1;
}
输出结果是0,但是a和b不相等不应当输出0啊?真是迷惑了…………
真心向大家请教,谢谢。
...全文
509 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangminghui 2013-01-05
  • 打赏
  • 举报
回复
memcmp可以比较任何内存中的数据,也可以用来比较对象,前提是你的很清楚对象的内部构造,否则很难确认比较结果的正确性,在使用上memcmp多数用来比较连续存储的内存块。
xiaolongren1989 2013-01-04
  • 打赏
  • 举报
回复
引用 2 楼 FancyMouse 的回复:
你在比较箱子而不是比较箱子里的内容。
比较string为什么不能有结果那,是因为memcmp不能用来比较对象吗? 如果不能比较对象,能否解释一下为什么不能吗? 谢谢
xiaolongren1989 2013-01-04
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
string是对象不是数组。
谢谢前辈指点,是不是memcmp不可用来比较对象;只能用来比较c++自带的数据类型那?
xiaolongren1989 2013-01-04
  • 打赏
  • 举报
回复
引用 1 楼 liangminghui 的回复:
memcmp是C运行库中的内存块内容比较函数,你用它比较STL库中的字符串,本来就不对。&a,&b只是经过模板包装了的string对象的指针,并非他的内容指针,你用a.c_str()替代试试;另外进行字符串内容比较,可用string中的compare进行。
好像懂了,memcmp不能用来比较对象;只能用来比较c++自带的数据类型是这么理解吧?
赵4老师 2013-01-04
  • 打赏
  • 举报
回复
string是对象不是数组。
FancyMouse 2013-01-04
  • 打赏
  • 举报
回复
你在比较箱子而不是比较箱子里的内容。
liangminghui 2013-01-04
  • 打赏
  • 举报
回复
memcmp是C运行库中的内存块内容比较函数,你用它比较STL库中的字符串,本来就不对。&a,&b只是经过模板包装了的string对象的指针,并非他的内容指针,你用a.c_str()替代试试;另外进行字符串内容比较,可用string中的compare进行。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧