在 if() 语句中使用 strcmp() 作为条件如何工作?

How does using strcmp() as a condition in an if() statement work?

下面伪代码的输出(它的伪代码因为它在语法上并不正确)产生 "computers"

strcpy(s1, "computer");
strcpy(s2, "science");

if(strcmp(s1, s2) < 0)
{
   strcat(s1, s2); 
}
else
{
  strcat(s2, s1);
}
s1[strlen(s1) - 6] = '[=10=]';

我不清楚结果如何 "computers"。我无法理解在 if() 语句中如何使用 strcmp() 的逻辑

好的,首先让我们看一个代码的工作示例,然后我将解释它是如何工作的:

#include <stdio.h>
#include <string.h>

void main() {

  char s1[100], s2[100];

  strcpy(s1, "computer");
  strcpy(s2, "science");

  if(strcmp(s1, s2) < 0)
  {
   strcat(s1, s2); 
  }
  else
  {
   strcat(s2, s1);
  }

  s1[strlen(s1) - 6] = '[=10=]';
  printf("%s",s1);
}

变量 s1 设置为 "computer" 并且 s2 设置为 "science"。使用 strcmp() 完成的第一个字符串比较评估 s1 的值是否小于 s2 的值。如果是,则 s1 与 s2 连接,因此 s1 的新值将是 "computerscience"。否则,无论字符串具有相同的值还是 s2 大于 s1,s2 都会连接到 s1,s2 的结果值为 "sciencecomputer"。

导致 true 结果的 if 条件是 "computer" 小于 "science" 所以 s1 的值发生变化,变为 "computerscience"。然后从 s1 的长度中减去值 6,在恰好包含字符 "c" 的索引处,一个空字符被设置为该元素的值。所以,现在 s1 的值为 "computers[=33=]ience"。这意味着当 s1 传递给 printf() 时,该函数将打印每个字符,直到它到达空字符,然后函数停止显示空及其后面的字符。