在C编程中使用strcmp

时间:2017-04-26 23:26:30

标签: c strcmp

以下代码段产生了“计算机”的结果,但它如何实现这一壮举并不明显。我寻求一个解释,详细说明代码如何精确地实现这一结果。注意:我不是在寻求调试帮助。我只想了解逻辑。

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

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

1 个答案:

答案 0 :(得分:1)

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

#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] = '\0';
  printf("%s",s1);
}

变量 s1 设置为&#34;计算机&#34;并且 s2 设置为&#34; science&#34;。与 strcmp()进行的第一次字符串比较评估s1的值是否小于s2的值。如果是这样,则s1与s2连接,因此s1的新值将是&#34; computerscience&#34;。否则,字符串是否具有相同的值或s2是否大于s1,s2与s2连接,s2的结果值为&#34; sciencecomputer&#34;。

导致真实结果的if条件是&#34;计算机&#34;不到&#34;科学&#34;所以 s1的值改变并成为计算机科学&#34;。然后从s1的长度中减去值6,并且在该索引处恰好保持字符&#34; c&#34;,将空字符设置为该元素的值。所以,现在s1的值是&#34;计算机\ 0&#34;。这意味着当s1传递给 printf()时,该函数将打印每个字符,直到它到达空字符,然后该函数停止显示null以及它后面的字符。