strtol と integer constant(整数定数)
手元にある「ANSI C 言語大辞典」によると、strtol は
base が 0 であれば、strtol は整数定数の形式を読み込む。
と書かれていて、じゃあ整数定数は何かというと
0xFFFE 12345UL
というような表記形式である。
簡単なテストをしてみたら、手元の gcc で期待通りに動かない。
コード:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char *tail; long l = strtol("12345L", &tail, 0); printf("l=%ld, tail=%s\n", l, tail); return 0; }
出力:
l=12345, tail=L
最後の L は整数定数表記の一部なので、末尾部に含まれるのではなく、本体に含まれて変換されて欲しいのだけど、動作としてそうはなっていない。
しかし、よく考えると基数は 36 まで許容されているので、L が果たして long を表すサフィックスなのか n 進数の数値の一部なのかは誰にも判断できないので、無視されてしかるべきだ。