[英]Confusion about logic when using strcmp() function
char string1[10];
char string2[10];
strcpy(string1, "hello");
strcat(string2, string1);
if(strcmp(string1, string2)){
printf("Heellloww!!!);
} else {
printf("Bye");
}
当我对if(strcmp(string1, string2))
执行检查时if(strcmp(string1, string2))
strcmp()
应该返回什么? 为了执行if
语句, if
应该总是返回正1?
务必检查手册:
int strcmp(const char *s1, const char *s2);
返回值:如果发现s1(或其前n个字节)分别小于,匹配或等于,则strcmp()和strncmp()函数返回小于,等于或大于零的整数。大于s2。
在您的情况下,如果string1
和string2
相同(或匹配),则strcmp
返回零。 所以,如果他们是相同的,你将打印Bye
,如果它们是不同的,那么你将打印Heellloww
。
您的代码的问题是strcat
:它将导致未定义的行为 。
为了使strcat
正常工作,传递给它的两个字符串都必须以空值结尾。 但是,您传递的第一个字符串不是以空字符结尾的-实际上,它是未初始化的。
解决这个问题很简单-您可以在声明的string2
的初始位置放置零:
char string2[10] = { 0 };
现在,字符串将比较相等,这意味着strcmp
将返回零。 如果要在两个字符串相同时打印Heellloww
,则需要在if
语句中添加== 0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.