【发布时间】:2020-10-08 18:59:57
【问题描述】:
我的 if 语句有两个条件。该语句在两个嵌套的for循环内,如下:
for(int i = 0; i < LENGTH; i++)
{
for(char j = 'a'; j <= 'z'; j++)
{
if((strcasecmp(&word[0], &j) == 0) && (strlen(word) == i))
{
//code here
}
}
}
(word 是一个 const char *,length 是一个定义为 45 的常数)。
如果条件只包含这两个条件之一,则在两个条件之一运行时返回true,因此它们分别为true。但是,当我像这样将它们放在一起时,它会返回 false。
有人知道为什么会这样吗?
【问题讨论】:
-
您不能将
&j传递给strcasecmp,因为它不是以null 结尾的字符串。这会触发未定义的行为,从那时起谁知道会发生什么。 -
if条件以惰性方式进行评估,因此如果您的条件是“and”序列,它将在第一个条件评估为false而不评估休息。以类似的方式,如果您的条件是“或”序列,它将在第一个条件评估为true时返回true。 -
无论如何,这种比较似乎没有多大意义。即使
&j是一个字符的字符串,strcasecmp也会在word包含多个字符的任何时候返回非零值。&word[0]与word意思相同;您似乎认为您只是在比较第一个字符,但事实并非如此。 -
我认为如果您能提供更多上下文(包括周围的代码)并解释这段代码的实际用途,将会有所帮助。
标签: c string if-statement c-strings