我正在研究适用于各种Unix和Windows 32位和64位操作系统的应用程序.
我使用的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");
}
Run Code Online (Sandbox Code Playgroud)
如上所述,代码在Windows 32位和64位上运行良好,但对于sprintf,它在Solaris上为我提供了核心.
我尝试在sprintf中进行类型转换,它运行良好.
sprintf(buf, "%.3lf %s", (double) sizeLongDouble, "str");
Run Code Online (Sandbox Code Playgroud)
什么是格式说明符long double?
我在这里犯的错是什么,我使用了错误的格式说明符,因为它给了核心?
为什么我需要在sprintf()中再次输入强制转换?
| 归档时间: |
|
| 查看次数: |
36354 次 |
| 最近记录: |