【C言語】文字列を0埋めする2つの方法(sprintf関数・memset関数)

はじめに、C言語で文字列を0埋めする方法について解説します。

文字列を0埋めすることは、データの整合性を保つために重要な処理です。

C言語では、文字列操作関数やポインタ演算子を使って簡単に0埋めができます。以下ではその方法を詳しく解説していきます。

目次

文字列の0埋め方法

文字列を0埋めすることは、プログラミングにおいてよく使われる処理です。C言語では、sprintf関数やmemset関数を使って文字列を0埋めすることができます。

sprintf関数を使った方法

sprintf関数は、指定されたフォーマットに従って文字列を生成します。この関数を使用して、文字列の先頭から指定した桁まで0で埋めることができます。

以下は、sprintf関数を使用して最低10桁の数字になるように0埋めした場合のコード例です。

#include <stdio.h>
#include <string.h>

int main() {
    char str[11];
    int num = 123;
    
    sprintf(str, "%010d", num);
    
    printf("%s\n", str); // 出力結果:0000000123
    
    return 0;
}

上記のコードでは、%010dというフォーマット指定子が用いられています。これは、「10桁分確保し、足りない部分はゼロで埋める」という意味です。

memset関数を使った方法

memset関数は、メモリブロック全体に特定の値(通常はゼロ)を設定します。この関数では、文字列の先頭から指定した桁まで0で埋めることができます。

以下は、memset関数を使用して10桁の数字(例えば456)を0埋めした場合のコード例です。

#include <stdio.h>
#include <string.h>

int main() {
    char str[11] = "456";
    
    memset(str + strlen(str), '0', 10 - strlen(str));
    
    printf("%s\n", str); // 出力結果:0000000456
    
    return 0;
}

こちらの方法は、既に文字がある文字列の初期化というより、未初期化の文字列を初期化する際に使われることが多いです。

0埋めも右詰めになってしまうので、基本的にはsprintf関数を使うようにしましょう。

注意点・まとめ

注意点

文字列の0埋めを行う際には、以下の点に注意してください。

  • 0埋めする桁数が決まっている場合は、sprintf関数を使った方法が簡単で便利です。
  • memset関数を使った方法では、文字列の長さと0埋めする桁数が一致している必要があります。
  • 文字列の長さよりも大きな桁数で0埋めしようとした場合、バッファオーバーフロー(メモリ領域外への書き込み)が発生する可能性があるため、十分に注意してください。

まとめ

本記事では、「C言語で文字列を0埋めする方法」について解説しました。

文字列を0埋めするのは文字数の桁数を揃える際に便利なテクニックです。

この記事で紹介したsprintf関数やmemset関数を使えば、手軽かつ正確に実装することが出来ます。

ただし、バッファオーバーフロー等の問題にも十分気を付けて実装してください。

目次