先行ゼロは、数値が8進数または8進数で表されていることを示します。したがって、010=8です。先行ゼロを追加しても効果はありません。数学で期待するのと同じように、x + 0 * 8 ^ n = x; 表現を長くしても値に変化はありません。
これをよく目にする場所の1つは、UNIXファイルモードです。0755は、実際には7 * 8 ^ 2 + 5 * 8 + 5=493を意味します。または、0022 = 2 * 8 + 2=10などのumaskを使用します。
atoi(nptr)
strtol(nptr, (char **) NULL, 10)
は、エラーを検出しないことを除いて、と同等として定義されます。そのため、atoi()
常に10進数を使用します(したがって、先行ゼロは無視されます)。strtol(nptr, anything, 0)
次のことを行います。
文字列は、任意の量の空白(によって決定されるisspace(3)
)で始まり、その後に単一のオプション'+'
または'-'
記号が続く場合があります。基数が0または16の場合、文字列に"0x"
プレフィックスを含めることができ、数値は基数16で読み取られます。それ以外の場合、次の文字がである場合を除き、ゼロの基数は10(10進数)と見なされます。次の文字が'0'
である場合は、8(8進数)と見なされます。
したがって、Cコンパイラと同じルールを使用します。