-2

int64 へのポインターを受け取り、値を出力する関数があります。呼び出し元の関数から整数を渡すと、元の値に加えて、int64 であり、整数を渡しているため、余分な 4 バイトが与えられます。int64 を受け入れる関数に整数を渡すと、整数値が出力されるようにするにはどうすればよいですか。

void foo(int64_t * temp) // just mentioning a simplified function
{
    printf("%llx\n",*temp); 
}

値「0x12345678」の整数を渡そうとすると、foo 関数が出力する値は「xxxxxxxx12345678」になります。ここで、xxx はガベージ値です。

更新:一時int64変数/ポインターを使用してこれを行うことができますが、それを行うことはできません。他の方法はありますか?

4

3 に答える 3

1

コンパイラを偽造するために何かを型キャストした場合、すべての賭けはオフになります。未定義の動作とそのすべてのジャズ。これを修正するには、適切な変数を作成し、代わりにそれを使用して関数を呼び出します。

int32_t x = 0x12345678;
int64_t y = x;

foo(&y);

編集:この変更を「しない、またはできない」と言っていますが、機能させたい場合は変更する必要があります。

于 2013-05-17T22:21:19.830 に答える