strcmp函数出现的问题

yass8899 2013-01-16 12:46:01
对字符数组处理,作比较,写了个小程序,用到了strcmp函数,但是有问题,请各位看一下。
#include<stdio.h>
#include<string.h>
void main()
{
char string[10] = "i+1+2+i";
int j,n;
for(j=0; j<10; j++)
{
n = strcmp(&string[j], "i");
printf("%d\n", n);

}

}
结果为:1 -1 -1 -1 -1 -1 0 -1 -1 -1
第1个和第7个均为“i”,可是第一个比较却不为0,很奇怪
用gdb检查,p j 0, p string[j] "i", p n 1 (竟然不是0)
不知道怎么错了,请高手指点!
谢谢!
...全文
313 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yass8899 2013-01-17
  • 打赏
  • 举报
回复
其实我是要比较字符,谢谢各位了!
图灵狗 2013-01-16
  • 打赏
  • 举报
回复
比较字符不要用strcmp,直接判断即可:

#include<stdio.h>
#include<string.h>
void main()
{
  char string[10] = "i+1+2+i";
  int j,n;
  for(j=0; j<10; j++)
  {
      n = (string[j] == 'i');
      printf("%d\n", n);
  
  }
  
}
HayYoung 2013-01-16
  • 打赏
  • 举报
回复
strcmp比较的是字符串,第一次比较的是"i+1+2+i"和"i",所以他们不等的。别忘了他们都是以0结束的,故最后一个是相等的。
HayYoung 2013-01-16
  • 打赏
  • 举报
回复
strcpy比较的是字符串,第一次比较的是"i+1+2+i"和"i",所以他们不等的。别忘了他们都是以0结束的,故最后一个是相等的。
lin5161678 2013-01-16
  • 打赏
  • 举报
回复
引用 8 楼 amoyman 的回复:
另外,这个程序可能发生内存溢出。当j==9时,如果string[9]不是'\0',就会读到string[10]……溢出了
这里没有溢出 string[9]是\0 当然楼主的做法这里没溢出只能说歪打正着的巧合
阿麦 2013-01-16
  • 打赏
  • 举报
回复
另外,这个程序可能发生内存溢出。当j==9时,如果string[9]不是'\0',就会读到string[10]……溢出了
阿麦 2013-01-16
  • 打赏
  • 举报
回复
strncmp(&string[j], "i", 1); 才行。 strcmp比较是整个串,
赵4老师 2013-01-16
  • 打赏
  • 举报
回复
strchr
兆帅 2013-01-16
  • 打赏
  • 举报
回复
引用 3 楼 turingo 的回复:
比较字符不要用strcmp,直接判断即可: C/C++ code?1234567891011121314#include<stdio.h>#include<string.h>void main(){ char string[10] = "i+1+2+i"; int j,n; for(j=0; j<10; j++) { n = (string[j] ==……
++
whizer 2013-01-16
  • 打赏
  • 举报
回复
下面是循环比较过程: j=0 "i+1+2+i" "i" j=1 "+1+2+i" "i" j=2 "1+2+i" "i" ... j=6 "i" "i" j=7 '\0' "i" ... 另外gcc下你的程序运行结果是: 43 -62 -56 -62 -55 -62 0 -105 -105 -105 是符合strcmp的规范的,看下面描述:

RETURN VALUES
     The strcmp() and strncmp() return an integer greater than, equal to, or
     less than 0, according as the string s1 is greater than, equal to, or
     less than the string s2.  The comparison is done using unsigned charac-
     ters, so that `\200' is greater than `\0'.

69,369

社区成员

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

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