文字列からの変換関数

int sscanf( const char* buf, const char* form, ... );   (stdio.h)
int
vsscanf( const char* buf, const char* form, va_list lst );

buf で渡された文字列を form に従って解析し、整数、浮動小数点数、文字列などを取得します。form には、入力変換指定子を含む文字列を指定します。また、form 内の % 文字列に対応する変数

form の後に指定します。

scanffscanf も、入力元の違いを除き、この関数と同じです。sscanf はメモリ データ (buf) を読み取りますが、scanf は標準入から、fscanf は指定されたファイルからデータを読み取ります。scanffscanf については、この点だけを読み替えてください。

これらの関数は、入力した変数の個数を返します。エラーが発生した場合、および入力元が空文字列または EOF であったために変数を 1 つも入力できなかった場合は、-1 を返します。

これらの関数では、入力データが form と照合され、一致すれば入力が続行されます。一致しないと、入力はその直前で終了します。入力の終了位置という概念は、sscanf では意味がありませんが、fscanf では、関数終了後の入力ファイルの位置に影響します。

form に文字 "%" 自体を含めるには、sprintf と同様に、"%%" と記述します。

form には、エスケープ シーケンスを含めることもできます。
int a; long b; char s[10];
sscanf( "12", "%d", &a ); // a=12
sscanf( "12", "%ld", &b ); // b=12
sscanf( "1 2", "%d %ld", &a, &b ); // a=1, b=2
sscanf( "1,2", "%d,%ld", &a, &b ); // a=1, b=2
sscanf( " AB XY", "%s", s ); // s[]="AB"

メモ   文字列の長さについては、%d、%f などで読み込む個々の数値の文字列表現が 500 バイトを超えてはならないことを除き、制限はありません。

int atoi( const char* str );   (stdlib.h)

文字列を int 整数に変換します。(int)atol( str ) と同じです。

long strtol( const char* str, char **end, int base );   (stdlib.h)
long
atol( const char* str );

文字列を long 整数に変換します。文字列先頭のホワイトスペースは読み飛ばされます。

strtol は、次の形式の str を基数 base の文字列と見なして数値に変換します。

[+|-]digits
  (digits は 0 〜 9、A 〜 Z、または a 〜 z の列)

base に 0 を指定すると、0x または 0X で始まる数値は 16 進数、0 で始まる数値は 8 進数、それ以外の数値は 10 進数と見なされます。

解析は、指定された基数の数値として解釈できない文字が現れた時点で終了します。end に NULL 以外を指定すると、str の解析が終了した位置が *end に格納されます。

数値がオーバーフローした場合は、errno に ERANGE が設定され、符号に応じて LONG_MIN または LONG_MAX が返されます。1 文字も解析できなかった場合は、0 が返されます。

atol は、数値がオーバーフローしても errno が変化しないことを除き、strtol( str, NULL, 10 ) と同じです。

unsigned long strtoul( const char* str, char **end, int base );   (stdlib.h)

文字列を unsigned long 整数に変換します。マイナス (-) 符号を受け付けないこと、および数値の有効範囲が異なることを除き、strtol と同じです。数値がオーバーフローした場合は、ULONG_MAX が返されます。

double strtod( const char* str, char **end );   (stdlib.h)
double
atof( const char* str );

文字列を double 値に変換します。文字列先頭のホワイトスペースは読み飛ばされます。

strtod は、次の形式の str を浮動小数点数に変換します。

[+|-]digits[.[digits]][{e|E}[+|-]digits]
  (digits は 0 〜 9 の列)

解析は、指定された基数の数値として解釈できない文字が現れた時点で終了します。end に NULL 以外を指定すると、str の解析が終了した位置が *end に格納されます。

数値がオーバーフローした場合は、errno に ERANGE が設定され、符号に応じて HUGE_VAL または - HUGE_VAL が返されます。1 文字も解析できなかった場合は、0.0 が返されます。

atof は、数値がオーバーフローしても errno が変化しないことを除き、strtod( str, NULL ) と同じです。