本文目录一览:
C语言小程序:两字符串为什么不相等?
比较两个字符串是否相等,要用strcmp函数。不能直接用==比较,用==比较的是两个字符串的首地址。
C语言 字符串相等的问题
字符串的比较是逐个比较的,字符串最后一位为“\0”,while循环完,指针均指向字符串尾部,if()判断为真,说明是2个相等的字符串,返回1,不相等返回0;scanf()是要存放的变量的地址,这个是有标准的;c是比较底层的,可以让我们详细知道函数的运作,不比其它语言,只知道怎么用便可
C语言测试字符串是否相等,为什么下面两个字符串被认为不等,可如果我把字符空间扩大到十以上又相等了?
1~9有九个数,你的数组长度只有9.你的字符串结束标记“ \0”存在哪里的?
请把数组长度都先改成10或以上.
arr[8] == '9' arr[8] 后面的东西你知道是什么东西么? 天知道内存顺序是怎么分配的,天知道你不申请足够的内存,那个‘\0’什么时候才会遇到。
天知道arr[8] tmp[8]之后是什么? 你没有手动设置 \0 或没有足够的空间让编译器帮助你添加'\0' 结束标记,程序就一直往后面找直到有一个结束.
***
思考一下:假如你是一个 strcmp函数,别人传入的参数就只有两地字符串的首地址,你从这两个首地址对应的字符开始比较,一个一个往后比较,什么时候停止了? 莫非不停止比到天荒地老.
先学习正确的写法,错误的写法为什么有时候会错有时候会对先别研究了。
理解一下strcmp的实现逻辑.
int strcmp( char* s , char* t)
{
int ret_val = 0;
while(*s *t) /* 两个同时不为结束标志 */
{
if(*s *t)
{
return 1;
}
else if(*s == *t)
{
/*若相等则去比较下一个字符*/
s++;
t++;
}
else
{
return -1;
}
}
/*其中有一个为0*/
if(*s *t)
{
/* *s != 0 , *t == 0 */
return 1;
}
else if(*s == *t)
{
/* 两个都为0 */
return 0;
}
else
{
/* *s == 0 , *t != 0 */
return -1;
}
}