以下代码段产生了“计算机”的结果,但它如何实现这一壮举并不明显。我寻求一个解释,详细说明代码如何精确地实现这一结果。注意:我不是在寻求调试帮助。我只想了解逻辑。
strcpy(s1, "computer");
strcpy(s2, "science");
if(strcmp(s1, s2) < 0)
{
strcat(s1, s2);
}
else
{
strcat(s2, s1);
}
s1[strlen(s1) - 6] = '\0';
答案 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以及它后面的字符。