函式
<cstdlib>

strtold

long double strtold (const char* str, char** endptr);
將字串轉換為 long double
解析 C 字串 str,將其內容(根據當前區域設定)解釋為浮點數,並返回其 long double 型別的值。如果 endptr 不是空指標,該函式還會將 endptr 的值設定為指向數字後面的第一個字元。

此函式的操作類似於 strtod 來解釋字串,但會生成 long double 型別的數字(有關解釋過程的詳細資訊,請參見 strtod)。

引數

str
以浮點數表示形式開頭的 C 字串。
endptr
對一個已分配的 char* 型別物件的引用,其值由函式設定為 str 中數值之後的下一個字元。
此引數也可以是空指標,此時它將不被使用。

返回值

成功後,函式將轉換後的浮點數作為 long double 型別的值返回。
如果無法執行有效的轉換,函式將返回零 (0.0L)。
如果正確的值超出了該型別可表示值的範圍,則返回一個正或負的 HUGE_VALL,並且 errno 被設定為 ERANGE
如果正確的值會導致下溢,函式將返回一個其絕對值不大於最小規格化正數的值(某些庫實現在這種情況下也可能將 errno 設定為 ERANGE)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* strtold example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* strtold */

int main ()
{
  char szOrbits[] = "90613.305 365.24";
  char * pEnd;
  long double f1, f2;
  f1 = strtold (szOrbits, &pEnd);
  f2 = strtold (pEnd, NULL);
  printf ("Pluto takes %.2Lf years to complete an orbit.\n", f1/f2);
  return 0;
}

輸出
Pluto takes 248.09 years to complete an orbit.


資料競爭

str 指向的陣列被訪問,endptr 指向的指標被修改(如果非空)。

異常 (C++)

無異常保證:此函式從不丟擲異常。

如果 str 沒有指向一個有效的 C 字串,或者 endptr 沒有指向一個有效的指標物件,將導致未定義行為

另見