繁体   English   中英

使用strcmp()函数时对逻辑的困惑

[英]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。

在您的情况下,如果string1string2相同(或匹配),则strcmp返回零。 所以,如果他们相同的,你将打印Bye ,如果它们是不同的,那么你将打印Heellloww

您的代码的问题是strcat :它将导致未定义的行为

为了使strcat正常工作,传递给它的两个字符串都必须以空值结尾。 但是,您传递的第一个字符串不是以空字符结尾的-实际上,它是未初始化的。

解决这个问题很简单-您可以在声明的string2的初始位置放置零:

char string2[10] = { 0 };

现在,字符串将比较相等,这意味着strcmp将返回零。 如果要在两个字符串相同时打印Heellloww ,则需要在if语句中添加== 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM