C ポインターの文献で C のスキルを磨こうとしているときに、このコードに出くわしました。この問題では、出力を正当化することになっています。strcat()
との作業に精通していstrcmp()
ます。strcmp()
渡された 2 つの文字列が同じ場合、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 です。これは、計算された 2 つの文字列が同じでなければならないことを意味します。複数のステップでステートメントを解決しようとしました。
まず、試してみstrcat(str3, strcpy(str2, str1))
ました。「str2」は「Good」に変更され、次に「DayGood」にstrcat()
変更されます。str3
これまでのところ、私の 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
両方のテスト ケースで、比較のために 2 つの異なる文字列を取得します。なぜstrcmp()
0 を生成するのですか?