論理演算子の評価順序

論理積 a && b の動作は、
aが真ならばbを評価結果とし、aが偽ならbを無視して偽を評価結果とする。


例えば、t1,t2にsをコピーしようとした以下のコードは

char s[] = "ABCDEFGHJ";
char t1[10], t2[10];
int i=0;
while((t1[i] = s[i]) && (t2[i] = s[i]))
i++;

t1[9] = s[9]('\0')の結果が偽なので、t2[9]に'\0'が代入されないという問題が起こる。



また、論理和 a || b の動作は、
aが真ならばbを無視して真を評価結果とし、aが偽ならbを評価結果とする。

なので、

char s[] = "ABCDEFGHJ";
char t1[10], t2[10];
int i=0;
while((t1[i] = s[i]) || (t2[i] = s[i]))
i++;

のようなコードでは、s[0]~s[8]の結果はt2に代入されず、s[9]('\0')のみ代入されるという結果になってしまう。