|
> んー、前にscanfでコンパイラによって挙動が変わったことがあったんだけど
> 記事が出てこない。無念。
私が知っている BCC の scanf のバグ。
int n, i = 2, j = 3;
n = sscanf("123 456 789", "%*[a-z] %d %d", &i, &j);
printf("n=%d, i=%d, j=%d\n", n, i, j);
%*[a-z] は、1文字以上の英字列を読み飛ばすという書式です。
先頭の "1" は英字ではありませんから、sscanf はそこでスキャンを打ち切り
n には 0 が返るはずです。実際、VC++、gcc、LSI C-86 では、出力が、
n=0, i=2, j=3
となりますが、BCC だけは、
n=2, i=123, j=456
となります。
|