printf(3S)、 sprintf(3S)、 scanf(3S)、 sscanf(3S) が long
またはポインタ引数に対して使用されている場合、それらを long
またはポインタ引数用に変更する必要がある場合があります。ポインタ引数を 32 ビットおよび 64 ビット環境で動作させるためには、書式文字列に指定する変換操作を %p にしてください。
char *buf; struct dev_info *devi; ... (void) sprintf(buf, "di%x", (void *)devi); % warning: function argument (number) type inconsistent with format sprintf (arg 3) void *: (format) int
推奨される使用法
char *buf; struct dev_info *devi; ... (void) sprintf(buf, `di%p", (void *)devi);
long
引数の場合は、long
サイズ指定子 l を書式化文字列の変換操作文字の前に追加してください。さらに、buf
によって示される記憶領域に 16 桁を格納できる大きさが十分にあることを確認してください。
size_t nbytes; u_long align, addr, raddr, alloc; printf("kalloca:%d%%%d from heap got%x.%x returns%x¥n", nbytes, align, (int)raddr, (int)(raddr + alloc), (int)addr); % warning: cast of 64-bit integer to 32-bit integer warning: cast of 64-bit integer to 32-bit integer warning: cast of 64-bit integer to 32-bit integer
推奨される使用法
size_t nbytes; u_long align, addr, raddr, alloc; printf("kalloca:%lu%%%lu from heap got%lx.%lx returns%lx¥n", nbytes, align, raddr, raddr + alloc, addr);