はじめに
どうも! みなため(@MinatameT)です。
この記事では、C言語のsnprintf関数についての説明をおこなっています。
snprintf関数は、文字列の連結ができるものです。例えば、「おはよう」と「ございます」を連結させて「おはようございます」にするようなイメージです。
それでは、文法を見ていきます。
snprintf関数の文法
- 2文字連結する場合:snprintf(X,n,”%s%s”,A,B);
※Xは代入先、nは連結する合計半角文字数、AとBはお互いに連結する文字列です。 - 3文字連結する場合:snprintf(X,n,”%s%s%s”,A,B,C);
※Xは代入先、nは連結する合計半角文字数、AとBとCはお互いに連結する文字列です。 - %sは、連結させる変数の数だけ書きます。例えば、AとBの2つなら%s%sで、AとBとCの3つなら%s%s%sです。
つまり、文字列を連結させた結果を、別のchar配列に代入する必要があります。
それでは、使用例を確認していきます。
snprintf関数の使用例1
ソースコード
#include<stdio.h>
int main(void)
{
char A[64] = "Southern_";
char B[64] = "Cross";
char X[64] = {0}; //何も入っていない状態
snprintf(X,14,"%s%s",A,B); //Xに、AとBを連結させたものを代入する。
printf("%s\n",X); //文字列の表示は「%s」。
return(0);
}
「Southern_」で半角9文字分、「Cross」で半角5文字分ですので、9 + 5の合計14文字分が必要です。
それでは、実行結果を確認してみましょう。
実行結果
Southern_Cross
見事に、配列Aと配列Bが連結された「配列X」が出来上がっています。
それでは、次の例を見ていきます。
snprintf関数の使用例2
ソースコード
#include<stdio.h>
int main(void)
{
char A[64] = "皆さん、";
char B[64] = "おはよう";
char C[64] = "ございます。あああ、マイクのテスト中……。";
char X[64] = {0}; //何も入っていない状態
snprintf(X,28,"%s%s%s",A,B,C); //Xに、AとBとCを連結させたものを代入する。
printf("%s\n",X); //文字列の表示は「%s」。
return(0);
}
日本語は全角1文字ですので、半角2文字と同じ大きさです。
したがって、「皆さん、」で半角8文字分、「おはよう」で半角8文字分、「ございます。あああ、マイクのテスト中……。」で半角42文字分あります。
ただし、今回は「あああ、マイクのテスト中……。」の部分はカットしようと思います。よって、配列Cの連結させる半角文字数は「ございます。」の半角12文字分にします。
そういうことですので、8 + 8 + 12 = 28文字分を連結させます。
それでは、実行結果を見ていきましょう。
実行結果
皆さん、おはようございます。
不要な部分はカットされて、必要な文字列のみを連結させることができました!
ただ、今回の場合は末尾のカットだったので簡単にできましたが、途中の文字列をカットしたい場合はやや面倒なやり方をしなければなりません。
それがstrncpy関数を使うやり方なのですが、ここでは説明いたしません。strncpy関数については、以下の記事を参照してください。
これで、snprintf関数の使い方はイメージできたと思います。あとは実践が大切ですね。皆さん、お疲れ様でした。