7

strtolin cのいくつかの例外的な結果に遭遇しました

サンプルプログラムはこちら。

#include <string.h>
#include <stdio.h>    
#include <stdlib.h>

int main()
{
    printf("%x\n", strtol("0xfffff70A", NULL, 0));
    return 0;
}

この単純なプログラムの出力は

0x7fffffff

ではなく0xfffff70A。を使用するstrtoulと、結果は正確に になり0xfffff70aます。私は 32 ビット マシンを使用していますが、どうなるのでしょう。PS。gcc 4.7.2 を使用しています

4

3 に答える 3

0

アーキテクチャには 32 ビットlongタイプがあります。0xfffff70Aは符号付き 32 ビットとして表現できませんlongerrnoに設定する必要がありましたERANGE

2 の補数では、32 ビット符号付き整数の表現可能な値の範囲は-0x800000000x7fffffffです。

于 2013-05-23T10:49:18.193 に答える