Я работаю над приложением, которое работает с различными вариантами Unix и Windows 32bit и 64-битной ОС.
Я использую тип данных long double
, когда я делаю sprintf()
и использовал long double
с %lf
в нем, тогда он отлично работает с окнами, не дает какой-либо ошибки, однако на платформе Solaris она дает ядро свалка.
Пример кода для этой же проблемы следующий.
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 32bit и 64bit, однако для sprintf он дает мне ядро на Solaris.
Я попробовал лить тип в sprintf, он работал нормально.
sprintf(buf, "%.3lf %s", (double) sizeLongDouble, "str");
Что такое спецификатор формата для long double
?
Какая ошибка я делаю здесь, я использую неправильный спецификатор формата, из-за которого он дает ядро?
Почему мне нужно вводить еще один раз в sprintf()?