論理演算子の評価順序
論理積 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')のみ代入されるという結果になってしまう。