C言語

【C言語】文字列を数値に数値を文字列に変換する

この記事では、C言語で文字列を数値に数値を文字列に変換する方法を解説します。

文字列を数値に変換する

文字列から数値型に変換するには以下のような関数を使います。

stdlib.h のインクルードが必要です

文字列 から 整数

atoi 文字列を int型 に変換
atol 文字列を long型 に変換
atoll 文字列を long long型 に変換

文字列 から 浮動小数点数

atof 文字列を double型 に変換

試しに文字列を数値に変換して出力してみます。

#include <stdio.h>
#include <stdlib.h>

int main(void){

    // 変換する文字列
    char s[] = "10";

    // 整数に変換
    int i = atoi(s);
    long l = atol(s);
    long long ll = atoll(s);

    printf("int: %d\n", i);
    printf("long: %ld\n", l);
    printf("long long: %lld\n", ll);


    // 浮動小数点数に変換
    double d = atof(s);

    printf("double: %f\n", d);

}

実行結果

int: 10
long: 10
long long: 10
double: 10.000000

文字列に数値に変換できない文字が含まれている場合 0 が返される。

#include <stdio.h>
#include <stdlib.h>

int main(void){

    // 数値に変換できない文字を含んだ文字列
    char s[] = "t10";

    // 整数に変換
    int i = atoi(s);
    long l = atol(s);
    long long ll = atoll(s);

    printf("int: %d\n", i);
    printf("long: %ld\n", l);
    printf("long long: %lld\n", ll);


    // 浮動小数点数に変換
    double d = atof(s);

    printf("double: %f\n", d);

}

実行結果

int: 0
long: 0
long long: 0
double: 0.000000

数値を文字列に変換する

数値型を文字列に変換するには snprintf()関数 を使うと簡単です。

int snprintf(char * restrict s, size_t n, const char * restrict format, ...);

第一引数に結果を格納する文字列、第二引数に文字列の長さ、第三引数に変換する数値に対応した変換指定子、それ以降に変換する数値を指定します。

#include <stdio.h>

int main(void){

    // 変換した文字列を格納する変数
    char buf[8];

    // 変換する int型 の値
    int i = 1234567;

    // int を 文字列 に変換
    snprintf(buf, 8, "%d", i);

    // 出力
    printf("%s\n", buf);

}

実行結果

1234567

文字列の末尾には終端文字が格納されるので文字数に注意してください。文字数をピッタリ指定していると1文字切れてしまう。

#include <stdio.h>

int main(void){

    // 変換した文字列を格納する変数
    char buf[4];

    // 変換する int型 の値
    int i = 1234;

    // int を 文字列 に変換
    snprintf(buf, 4, "%d", i);

    // 出力
    printf("%s\n", buf);

}

実行結果

123

また、複数の数値をまとめて変換することもできる。

#include <stdio.h>

int main(void){

    // 変換した文字列を格納する変数
    char buf[16];

    // 変換する数値
    int i = 1234;
    long l = 5678;

    // 文字列 に変換
    snprintf(buf, 16, "%d %ld", i, l);

    // 出力
    printf("%s\n", buf);

}

実行結果

1234 5678

まとめ

この記事では、C言語で文字列を数値に数値を文字列に変換する方法を解説しました。

数値から文字列への変換、または文字列から数値に変換するのに通常のキャストは行えないので注意しましょう!

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

C言語おすすめ参考書
MMGames (著), 秀和システム(出版)
中山 清喬 (著), 株式会社フレアリンク (著)