展开全部
此题主要考察了c语言的数据类型,有以下几个点你需要清楚:
在C语言中整型常量的默认数据类型是int;
当两种不同类型的数值进行比较时,编译器会先将比较符号两端的数据转化为同一类型,而转化的方式是向数据范围大的转化,比如char和int比较时,char转化为int,而int与float比较时,int转化为float。
具体到这个题目中,strlen(str1) - strlen(str2)的数据类型是unsigned,而0是int,两者比较大小时编译器会将unsigned的符号去掉来比较大小,因此,当str1的长度小于str2的长度时结果就会出错。知道原理,改正程序就很简单了,改为:
return (int)strlen(str1)- (int)strlen(str2) > 0;
或者
return strlen(str1) > strlen(str2);
就行了,以上。
展开全部
两个unsigned int的差,仍是一个unsigned int。所以,当strlen(str1) < strlen(str2) 时,
其差值 strlen(str1) - strlen(str2) 就会是一个负数,但是这个负数若以 unsigned int 来解读时,就会变成一个“正数”了(因为 unsigned int 只要不是0,都表示一个正数的)。
为使函数返回正确结果,只要把原 return strlen(str1) - strlen(str2) > 0; 改为 : return strlen(str1) > strlen(str2);即可。
其差值 strlen(str1) - strlen(str2) 就会是一个负数,但是这个负数若以 unsigned int 来解读时,就会变成一个“正数”了(因为 unsigned int 只要不是0,都表示一个正数的)。
为使函数返回正确结果,只要把原 return strlen(str1) - strlen(str2) > 0; 改为 : return strlen(str1) > strlen(str2);即可。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strlen定义为无符号整数,当相减为负时有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
电脑报价系统,电脑部件的信息包括
肯定知道
肯定知道
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询