首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >` `long double`的格式说明符是什么

` `long double`的格式说明符是什么
EN

Stack Overflow用户
提问于 2013-02-14 17:22:43
回答 2查看 41.9K关注 0票数 25

我正在工作的应用程序,在各种风格的Unix和Windows的32位和64位操作系统。

我使用的是long double数据类型,当我使用sprintf()并使用带有%lflong double时,它在windows上工作得很好,不会给出任何类型的错误,但是在Solaris平台上它会给出核心转储。

相同问题的示例代码如下所示。

代码语言:javascript
复制
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中尝试了类型转换,它工作得很好。

代码语言:javascript
复制
sprintf(buf, "%.3lf %s", (double) sizeLongDouble, "str");

long double的格式说明符是什么

我在这里犯的错误是什么,我是否使用了错误的格式说明符,因为它提供了核心?

为什么我需要在sprintf()中再次输入cast?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-14 17:27:24

对于long double,您应该使用format "%Lf"。使用小L(即"%lf")进行格式化对POSIX系统没有影响(请参阅the specification)。

票数 24
EN

Stack Overflow用户

发布于 2013-02-14 17:25:10

根据我见过的编译器,%Lf%llf都尝试了一下,看看哪一个能正常工作。您使用的%lfdouble的格式说明符,而不是long double的格式说明符。我相信在g++上你应该使用%llf,而在visual studio上你应该使用%Lf

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14871466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档