1

負の数を String から unsigned long に変換しようとしていますが、「-」記号が原因で予期しない結果が得られます。コードの下

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

main()
{
   char * pValue = "-1234657890000";
    unsigned long ValueLong ;
    sscanf( pValue, "%llu", &ValueLong ) ;
    printf ("%llu",ValueLong);
}

"-1234657890000" を printf 出力として持つ代わりに、コードはこの値 " 18446742839051661616 " を表示しています。

ありがとうございました

4

4 に答える 4

1

指定した値は unsigned long に収まりません (または、少なくとも収まる保証はありません)。もう 1 つのポイントは、unsigned-1234567890000ではないということです。代わりに使用し、次のようにリテラルの末尾に LL を付ける必要があることに注意してください。long long

char * pValue = "-1234657890000LL";
于 2013-09-30T10:48:40.153 に答える
0

どうもありがとう、それはあなたの提案に従って解決されました。あなたが言及したように、問題は署名されていないデータ型にありました

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

main()
{
   char * pValue = "-1234657890000";
    long long  ValueLong ;
    sscanf( pValue, "%ld", &ValueLong ) ;
    printf ("%ld",ValueLong);
}
于 2013-09-30T11:04:28.883 に答える