您的位置:

为什么字符串相同却不相等c语言,c语言 字符串相等

本文目录一览:

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;

}

}