【发布时间】:2021-10-29 02:06:33
【问题描述】:
#include<stdio.h>
#include<string.h>
void printlen(char *s,char *t){
int c=0;
int len=((strlen(s)-strlen(t)>c)?strlen(s):strlen(t));
printf("%d",len);
}
void main(){
char *x="abc";
char *y="defgh";
printlen(x,y);
}
strlen(s) 是 3,strlen(t) 是 5,那么为什么 strlen(s)-strlen(t)>c 评估为 true?
【问题讨论】:
-
将括号读作
if。将问号读作then。将冒号读作else。所以((strlen(s)-strlen(t)>c)?strlen(s):strlen(t))计算结果为“if (strlen(s)-strlen(t)>0) then strlen(s) else strlen(t)” -
您最好将条件重新组织为
(strlen(s) > strlen(t)),或者如果c可能不为零,那么(strlen(s) > strlen(t) + c)。避免减去无符号数。