snprintf関数 - フォーマット文字列を文字列変数へ出力(最大文字数制限あり)
snprintf関数は、機能はsprintf関数と同じですが、最大文字数を指定できます。バッファオーバーランを確実に防ぎたい場合に、利用できます。snprintf関数は、stdio.hを読み込むと利用できます。
#include <stdio.h> int snprintf(char * restrict s, size_t n, const char * restrict format, ...);
第二引数で最大文字数(文字列終端のヌル文字「\0」を含んだ文字数なので、実質的には「n - 1」)を指定できる以外は、sprintf関数と同じです。文字数が「n - 1」を超えた場合は、それ以降の文字列は書きこまれず、ヌル文字「\0」が書き込まれます。
snprintf関数のサンプル
snprintf関数のサンプルです。
#include <stdio.h> #include <stdint.h> int main(void) { const char* name = "long_long_long_name"; int32_t age = 40; char message[16]; // 最大文字数を制限しているので、バッファオーバーランは起きない snprintf(message, 16, "I'm %s. Age is %d.", name, age); printf("%s\n", message); }
出力結果です。出力が欠けています。
I'm long_long_l
バッファオーバーランは起こりませんが、プログラム的には、おそらくこれは正しい結果ではないので、バッファの長さを伸ばすなど、プログラムを修正する必要がある可能性が高いです。