if( (*ptr != ',') || strlen(ptr+1) < sizeof(struct A) * num1)
{
printf("\n Condition satisfied.");
}
これが問題のコードです。str = "-1,ABCDEFGH" という形式の文字列と、サイズが 15 バイトの構造体 A があります。
私は事前にこの操作を行っています:
number = strtoul(str, &ptr, 10);
この操作の後、ptr は「,」を指し、number = -1
IF 条件を見ると、最初のステートメントは偽であると評価され (*ptr = ',' のため)、2 番目のステートメントは偽であるはずなのに実行されて TRUE になります ( strlen(ptr+1) は正であり、(sizeof( struct A) * number) は、単に num1 が負の値であるため、負です)。
このステートメントが true であると評価され、IF ブロックに入るのはなぜですか? 「条件が満たされました」という出力が得られますが、そうではありません。前もって感謝します。