C言語で文字列を数値に変換する方法
1872 ワード
C言語では、文字列を任意のタイプ(整数、長整数、浮動小数点など)の数字に変換できるいくつかの標準ライブラリ関数が用意されています.文字列をatoi()関数で整数に変換する例を次に示します.
次の関数は、文字列を数値に変換します.
------------------------------------------------------------------------
関数名
------------------------------------------------------------------------
atof()文字列を二重精度浮動小数点型値に変換
atoi()文字列を整数値に変換
atol()文字列をロング整数値に変換
strtod()文字列を二重精度浮動小数点型値に変換し、変換できない残りのすべての数値をレポートします.
strtol()文字列をロング整数値に変換し、変換できない残りのすべての数値をレポートします.
strtoul()文字列を符号なしロング整数値に変換し、変換できない残りのすべての数値をレポートします.
------------------------------------------------------------------------
文字列を数値に変換するとオーバーフローする可能性があります.strtoul()のような関数を使用すると、このオーバーフローエラーをチェックできます.次の例を参照してください.
# include
# include
void main (void) ;
void main (void)
{
int num;
char * str = "100";
num = atoi(str);
printf("The string 'str' is %s and the number 'num' is %d.
",
str, num);
}
atoi()関数には、数値に変換する文字列というパラメータが1つしかありません.atoi()関数の戻り値は,変換した整数値である. 次の関数は、文字列を数値に変換します.
------------------------------------------------------------------------
関数名
------------------------------------------------------------------------
atof()文字列を二重精度浮動小数点型値に変換
atoi()文字列を整数値に変換
atol()文字列をロング整数値に変換
strtod()文字列を二重精度浮動小数点型値に変換し、変換できない残りのすべての数値をレポートします.
strtol()文字列をロング整数値に変換し、変換できない残りのすべての数値をレポートします.
strtoul()文字列を符号なしロング整数値に変換し、変換できない残りのすべての数値をレポートします.
------------------------------------------------------------------------
文字列を数値に変換するとオーバーフローする可能性があります.strtoul()のような関数を使用すると、このオーバーフローエラーをチェックできます.次の例を参照してください.
# include
# include
# include
void main(void);
void main (void)
{
char* str = "1234567891011121314151617181920" ;
unsigned long num;
char * leftover;
num = strtoul(str, &leftover, 10);
printf("Original string: %s
",str);
printf("Converted number: %1u
" , num);
printf("Leftover characters: %s
" , leftover);
}
上記の例では、変換する文字列が長すぎて、符号長なし整数値の値範囲を超えているため、strtoul()関数はULONG_を返すMAX(4294967295)を使用します.char leftoverは、文字列にオーバーフローをもたらす文字を指します.また、strtoul()関数は、グローバル変数errnoをERANGEに割り当て、関数の呼び出し元にオーバーフローエラーが発生したことを通知します.関数strtod()とstrtol()がオーバーフローエラーを処理する方法は、関数strtoul()と全く同じであり、コンパイラドキュメントからこの3つの関数の詳細をさらに理解することができます.