我正在研究适用于各种Unix和Windows 32位和64位操作系统的应用程序。什么是`long double'的格式说明符
我使用long double
数据类型,当我做sprintf()
和使用long double
与%lf
它,然后它正常工作与Windows不提供任何类型的错误,但是在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 32位和64位的sprintf的它给我的核心在Solaris上工作正常不过。
我尝试在sprintf中的类型铸造工作正常。
sprintf(buf, "%.3lf %s", (double) sizeLongDouble, "str");
long double
的格式说明符是什么?
我在这里做了什么错误,我是否使用了错误的格式说明符,因为它提供了核心?
为什么我需要在sprintf()中再输入一次?
我相信这取决于编译器。 '%Lf'是否适用于所有版本的'g ++'和'gcc'? – 2013-02-14 09:29:09
我试过使用LF工作,它是否适用于Unix平台(32和64位)和Windows平台(32和64位)的所有版本的g ++,gcc和visual studio的所有版本? – 2013-02-14 09:31:18
@PrasadSDeshpande它是在POSIX中指定的,所以应该在所有Unix或类Unix环境中工作。 – 2013-02-14 09:32:36