私はUnixとWindowsの32ビットと64ビットのOSのさまざまなフレーバーで動作するアプリケーションに取り組んでいます。
私はlong double
データ型を使用しています。データ型を使用しsprintf()
て使用すると 、Windowsで正常に動作しますが、エラーは発生しませんが、Solarisプラットフォームではコアダンプが発生します。long double
%lf
同じ問題のサンプルコードは次のとおりです。
void main(){
string size = "16622";
string sizeFact = "20";
long long sizeLongLong = strtoll(size);
int factInt = atoi(sizeFact);
long double sizeLongDouble = (long double) sizeLongLong/pow(2, factInt);
char buf[512];
sprintf(buf, "%.3lf %s", sizeLongDouble, "str");
}
上記のように、コードはWindows 32ビットおよび64ビットで正常に機能しますが、sprintfの場合、Solarisでコアが提供されます。
sprintfで型キャストを試してみましたが、うまくいきました。
sprintf(buf, "%.3lf %s", (double) sizeLongDouble, "str");
フォーマット指定子は何long double
ですか?
私がここで犯している間違いは何ですか、それがコアを与えているために間違ったフォーマット指定子を使用していますか?
sprintf()でもう一度型キャストする必要があるのはなぜですか?