为了账号安全,请及时绑定邮箱和手机立即绑定

用strcmp函数比较两个字符串,结果不正确啊?

用strcmp函数比较两个字符串,结果不正确啊?

C
子衿沉夜 2019-03-08 11:07:52
#include <stdio.h>#include <string.h>main(){ char a[]={'a','b','c'}; char b[]={'a','b','c'}; int c=strcmp(a,b); printf("%d\n",c); getch();}两个字符串数组完全一样,按照strcmp函数应该输出0但是输出-1,用wintc编译输出-47,得不到正确结果。发现string.h中的函数不太靠谱啊,以前用过其中的isapha、isdigit等函数统计各种字符,发现函数的返回值根本不像描述的那样。
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

strcmp的实现是这样的,对两个字符串,先比较第一个字符,如果不相等,返回差值。如果相等,继续比较下一个字符,直到有不相等或遇到‘\0’时结束。

现在你把数组a和b传入,因为前三个字符都相等,会越界继续比较的。

如果你想比较两个字符串,字符串是要用‘\0’结束的。
如果你只想比较前n个,可以使用strncmp,strncmp(a,b,3);

查看完整回答
反对 回复 2019-03-22
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

你这是在比较字符数组了吧 不是在比较字符串了
char a[] = "abc";
char b[] = "abc";应该这么定义
你之前定义的是
char a[]={'a','b','c'}; //char a[3] 是可以的 a[2] = 'c'
char b[]={'a','b','c'};// char a[4]也是可以的 a[3] = '\0'
不一样的

查看完整回答
反对 回复 2019-03-22
?
森栏

TA贡献1810条经验 获得超5个赞

你可以把字符串的初始化改成这样:
char a[]="abc";
char b[]="abc";
那个getch();可以不要

查看完整回答
反对 回复 2019-03-22
  • 3 回答
  • 0 关注
  • 704 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信