Pracuję nad aplikacją, która działa na różnych wersjach systemu operacyjnego Unix i Windows 32-bit i 64-bitowego.Co to jest specyfikator formatu dla `long double`
Używam typ long double
danych Kiedy zrobić sprintf()
i używane long double
z %lf
w nim to działa dobrze z okien nie daje jakiegokolwiek błędu, jednak na platformie Solaris daje zrzutu.
Przykładowy kod dla tego samego problemu jest następujący.
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");
}
Jak wspomniano powyżej kod działa poprawnie na Windows 32bit i 64bit jednak dla sprintf daje mi rdzeń na Solaris.
Próbowałem odlewania typu w sprintf to działało dobrze.
sprintf(buf, "%.3lf %s", (double) sizeLongDouble, "str");
Jaki jest specyfikator formatu dla long double
?
Jaki błąd popełniam tutaj, czy używam niewłaściwego specyfikatora formatu, z powodu którego podaje on rdzeń?
Dlaczego muszę pisać jeszcze raz w sprintf()?
Wierzę, że to zależy od kompilatora. Czy '% Lf' działa na wszystkich wersjach' g ++ 'i' gcc'? –
Próbowałem używać LF, które działało, czy działało dla wszystkich wersji g ++, gcc i visual studio na wszystkie smaki platformy Unix (32 i 64bit) i platformy Windows (32 i 64bit)? –
@PrasadSDeshpande Jest to określone w POSIX, więc powinno działać we wszystkich środowiskach uniksowych lub uniksowych. –