• ベストアンサー

sprintf_sなどでLONGLONG型を扱うと・・

sprintf_sで幾つかの変数を文字列として結合させていて、 ふとLONGLONG型を扱った時、1つ後ろ側の%dの数値がおかしくなる事に気付きました。 (long)とキャストしてみると、1つ後ろ側の数値も一応出るのですが、変になっていました。 (long)とキャストしたLONGLONG型を、sprintf_sの最後尾の%dに当てれば正常に動作しますし、 最初から外の変数でlongにキャストしておけば問題ない事もわかるのですが、 なぜ後ろの%dが影響を受けるのでしょうか? if判定も正しく通過してくれないみたいですし、 LONGLONG型が一応規格外なだけな話だとは思うのですが、 4バイトを超える変数は全てこういうものだったりするのでしょうか。 何か参考になりそうなURLなどを紹介して頂けるだけでも幸いです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

long longを%dで変換させたということでしょうか 8バイトの変数が格納されたスタックから4バイトしか取り出さないので当然変になります %lld で変換しましょう

noname#202167
質問者

お礼

%lldというのが有ったのですね。 後ろまで影響を受けるのは・・謎ですが、 ありがとうございました~。

その他の回答 (1)

回答No.1

プレフィックスを指定しましょう。

noname#202167
質問者

お礼

ご回答ありがとうございました。