在我使用 C 指针文献来磨练我的 C 技能的过程中,我遇到了这段代码。在这个问题中,我应该证明输出的合理性。我熟悉 和 的strcat()
工作strcmp()
。我知道strcmp()
当两个字符串通过时返回 0 是相同的。
# include <stdio.h>
# include <string.h>
int main()
{
static char str1[]="Good";
static char str2[20];
static char str3[20] ="Day";
int l;
l = strcmp(strcat(str3, strcpy(str2, str1)), strcat(str3, "good"));
printf("%d\n", l);
return 0;
}
提供的答案是 0,这意味着两个计算的字符串必须相同。我试图通过多个步骤解决该语句。
首先,试过了strcat(str3, strcpy(str2, str1))
。'str2' 变为“Good”,然后strcat()
变为str3
“DayGood”。到目前为止,我的 gcc 编译器同意我的看法。
来到strcat(str3, "good")
,由于 str3 已更改为DayGood
,strcat
更改str3
为DayGoodgood
。
再次,gcc 与我争吵。
int main()
{
static char str1[]="Good";
static char str2[20];
static char str3[20] ="Day";
int l;
printf("%s\n", strcat(str3, strcpy(str2, str1)));
printf("%s\n", strcat(str3, "good"));
//l = strcmp(strcat(str3, strcpy(str2, str1)), strcat(str3, "good"));
//printf("%d\n", l);
return 0;
}
它产生
DayGood
DayGoodgood
我再次尝试了这种变化。
int main()
{
static char str1[]="Good";
static char str2[20];
static char str3[20] ="Day";
int l;
printf("%s\n", strcat(str3, "good"));
printf("%s\n", strcat(str3, strcpy(str2, str1)));
//l = strcmp(strcat(str3, strcpy(str2, str1)), strcat(str3, "good"));
//printf("%d\n", l);
return 0;
}
它产生。
Daygood
DaygoodGood
在我的两个测试用例中,我得到了两个不同的字符串进行比较。那么为什么会strcmp()
产生一个 0 ?