函式
<cstdlib>

strtof

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

該函式首先丟棄儘可能多的空白字元(如同在isspace中),直到找到第一個非空白字元。然後,從這個字元開始,儘可能多地提取符合浮點字面量語法的有效字元(見下文),並將其解釋為數值。指向最後一個有效字元之後剩餘字串的指標將儲存在endptr所指向的物件中。

對於使用"C"區域設定的strtof,一個有效的浮點數由一個可選的符號字元(+-)後跟以下之一組成:
  • 一個數字序列,可以包含一個小數點字元(.),其後可選擇性地跟一個指數部分(一個eE字元,後跟一個可選的符號和一串數字)。
  • 一個0x0X字首,後跟一串十六進位制數字(如同在isxdigit中),可以包含一個小數點來分隔整數和小數部分。其後可選擇性地跟一個2的冪指數(一個pP字元,後跟一個可選的符號和一串十六進位制數字)。
  • INFINFINITY(不區分大小寫)。
  • NANNAN序列(不區分大小寫),其中序列是一串字元,每個字元要麼是字母數字字元(如同在isalnum中),要麼是下劃線字元(_)。

如果str中的第一個非空白字元序列不構成剛才描述的有效浮點數,或者因為str為空或只包含空白字元而導致不存在這樣的序列,則不執行任何轉換,函式返回0.0F

引數

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

返回值

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

示例

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

int main ()
{
  char szOrbits[] = "686.97 365.24";
  char* pEnd;
  float f1, f2;
  f1 = strtof (szOrbits, &pEnd);
  f2 = strtof (pEnd, NULL);
  printf ("One martian year takes %.2f Earth years.\n", f1/f2);
  return 0;
}

輸出
One martian year takes 1.88 Earth years.


資料競爭

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

異常 (C++)

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

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

另見