关于strcmp的一个问题

lxb365 2005-12-15 11:41:18
char* p="lovemydog";
int lon=strlen(p);
char* q=(char*)malloc(lon);
for(int i=0;i<lon;i++)
q[i]=p[i];
cout<<strcmp(q,p)<<endl;

为什么结果是1,难道p和q不相等吗?
...全文
160 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
greenteanet 2005-12-16
  • 打赏
  • 举报
回复
同意楼上的看法.
Zark 2005-12-16
  • 打赏
  • 举报
回复
原因是楼上诸位说的,不包括'\0'的问题,但q并不一定比p小.因为q实际上是个字符数组不是个字符串,你在strcmp中强行把它视为字符串,因此q将越过lon长度向后搜寻第一个'\0',因此q实质上已经不再是你印象中的那个q了,其内容取决于q+lon后面的内容.
lxb365 2005-12-16
  • 打赏
  • 举报
回复
照你们所说,q比p小,那strcmp(q,p)应该是-1才对,可结果是1啊
sankt 2005-12-16
  • 打赏
  • 举报
回复
char* p="lovemydog";
int lon=strlen(p);
char* q=(char*)malloc(lon+1); //这时候就是0了
for(int i=0;i<lon;i++)
{
q[i]=p[i];
}

cout<<strcmp(q,p)<<endl;
wohow 2005-12-16
  • 打赏
  • 举报
回复
尽管数组越界是所有C/C++程序员都知道的错误,但这样的错误仍然很多人会犯
zeroblock 2005-12-15
  • 打赏
  • 举报
回复
设成这样int lon=strlen(p)+1;

因为strlen函数计算字符串长度,不包括'\0'在内的
fangcd 2005-12-15
  • 打赏
  • 举报
回复
int lon=strlen(p);

这句返回的好像是P的长度,但不包括结束符"/0"

所以q比p小

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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