文字列変換関数

C言語は、文字列を任意のタイプ(整数、長整数、浮動小数点など)の数値に変換できるいくつかの標準ライブラリ関数を提供します。以下は、atoi()関数を使用して文字列を整数に変換する例です。

<stdioを含めます。h>

<stdlibを含めます。h>

void main(void);
void main(void)
{ int num; char * str =“ 100”; num = atoi(str); printf( "文字列 'str'は%sで、数値 'num'は%dです。\ n"、str、num); }





atoi()関数には、数値に変換される文字列であるパラメータが1つだけあります。atoi()関数の戻り値は、変換された整数値です。

次の関数は、文字列を数値に変換できます。

函数名    作  用

atof()は文字列を倍精度浮動小数点値に
変換しますatoi()は文字列を整数値に
変換しますatol()は文字列を長整数値に
変換しますstrtod()は文字列を倍精度浮動小数点値に変換します変換できない残りのすべての数値を報告
strtol()は文字列を長整数値に
変換し、変換できない残りのすべての数値を報告しますstrtoul()は文字列を符号なし長整数値に変換し、変換できない残りのすべての数値を報告します変換された

文字列を数値に変換するとオーバーフローが発生する可能性があります。strtoul()などの関数を使用すると、このオーバーフローエラーを確認できます。次の例を考えてみましょう。

<stdioを含めます。h>

<stdlibを含めます。h>

<制限を含めます。h>

void main(void);
void main(void)
{ char * str =“ 1234567891011121314151617181920”; unsigned long num; char *残り物; num = strtoul(str、&leftover、10); printf( "元の文字列:%s \ n"、str); printf( "変換された数値:%1u \ n"、num); printf( "残りの文字:%s \ n"、残り); }







上記の例では、変換される文字列が長すぎて、符号なし長整数値の値の範囲を超えています。したがって、strtoul()関数はULONG_MAX(4294967295)を返し、それを使用します。charの残り物は、オーバーフローの原因となった文字列の部分を指します。同時に、strtoul()関数はグローバル変数errnoをERANGEに割り当てて、オーバーフローエラーが発生したことを関数の呼び出し元に通知します。関数strtod()およびstrtol()は、関数strtoul()とまったく同じ方法でオーバーフローエラーを処理します。これら3つの関数の詳細については、コンパイラのドキュメントを参照してください。

おすすめ

転載: blog.csdn.net/weixin_44856544/article/details/114942582