文字列を数値型に変換する関数

 早速、標準ライブラリ関数について覚えていきましょう。まず最初に、今回は文字列を数値型に変換する関数について解説します。以前、型変換の方法として、

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    int a;
    int b;
    double result;
    
    a = 3;
    b = 2;
    result = (double)a / b;     // 型変換をしています
    
    printf("result = %f\n", result);
    
    return 0;
}

 このようなプログラムをご紹介しました。数値型(整数型と小数型)間の型変換であれば、このようなキャストという方法で問題ありません。ただし、文字(列)から数値型に型変換する場合は、この方法では出来ません。というのも、文字列の変数(文字型の配列)の中身も数字なのですが、数値とは違い文字コード(ASCIIコード)を表した数字が格納されています。そのため、単純なキャストではASCIIコードから本来の数値に変換することが出来ず、標準ライブラリ関数の命令に頼るしかありません。

 文字列を数値型にするときに使われる関数がatoi関数(整数型に変換する場合)とatof関数(小数型に変換する場合)です。以下のプログラムを作成し、実行してみて下さい。

#include <stdio.h>
#include <stdlib.h>		//stdlib.hのインクルードを忘れずに

int main(int argc, const char * argv[])
{
    
    // insert code here...
    char a[] = "20";
    char b[] = "30";
    
    printf("(cast) a + b = %d\n", (int)a + (int)b);
    printf("(atoi) a + b = %d\n", atoi(a) + atoi(b));
    
    return 0;
}

 実行すると、以下のような結果が表示されます。

(cast) a + b = -1082134377
(atoi) a + b = 50

 キャストでは上手く変換できていないのに対し、atoi関数を用いると正常に足し算が出来ていることを確認して下さい。

■スポンサーリンク

このページの先頭へ