我正在研究適用於各種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