背景:
做一道题,即使if中结果是3-6=-3也会执行。疯狂debug快被逼疯
if(strlen(str1) - strlen(str2) > 0 ){function();}
定位原因:
strlen()返回的是unsigned long格式数据,unsigned long数据<0会溢出变为一个正数。
#include <stdio.h>
#include <string.h>
int main(){
char str1[10];
char str2[10];
strcpy(str1,"hi");
strcpy(str2,"shit");
printf("%hd - %hd = %hd\n",strlen(str1),strlen(str2),(strlen(str1) - strlen(str2)));
if((strlen(str1) - strlen(str2)) > 0){
printf("shit\n");
}
return 0;
}