>>147
>>>140
>もう少し詳しく教えていただきたいです。

例えばa=10という式の値は、代入後のaの値と同じになる。だから、
int a, b;
a = (b = 10); /* または単に a = b = 10; */
というコードはaとbに10を代入するし、
double a;
printf("%f", a = 10);
というコードは例えば10.000000を表示する。

strcpyが第一引数を返すのは、ちょうどこれに対応する。つまり、
strcpy(a, strcpy(b, "foo"));
はaとbに"foo"をコピーするし、
printf("%s", strcpy(a, "foo"));
はfooと出力する。