请教各位高手,这里的循环为什么会出现这种现象

for (i = 0; i < (strlen(a) - strlen(b)+1); i++){……}

这时候很奇怪的是引发异常了 循环还在一直进行

而当我把程序改为

int m=0;
for (i = 0; i < (m=strlen(a) - strlen(b)+1); i++){……}

循环就在适当的时候终止了 这是为什么?

strlen()返回的类型是size_t,也就是无符号整型;可能和这个有关,第二个你是把它转换成了int类型的

比较奇怪,为啥这样写代码呢?
1. 每次都计算循环条件,非常不利于性能.因为strlen函数返回数值都是常数,所以最好这样做:

int m = strlen(a) - strlen(b)+1//确保了a和b的长度哪个长了吗?
  1. 我不认为第一个存在问题,因为循环次数是size_t,只要能够比较大小即可.而不应该出现循环终止不了的问题.可否把异常log贴出来.???

  2. 我本地验证了下
    图片说明
    图片说明
    没有看到异常啊..

thanks

每次循环都会重新计算(strlen(a) - strlen(b)+1)影响代码性能,在进入循环前,计算出来赋给一个变量