sprintf
int sprintf(char *str, const char format, ...);として宣言されています。char* str
は出力が書き込まれるバッファーですが、悪意のあるユーザーがそのバッファーのサイズよりも多くをそのバッファーに書き込む可能性があるsnprintf
ため、出力バッファーのサイズを含むパラメーターを含む which を使用して、バッファーオーバーフローが発生しないようにすることもできます。注意すべきことは、書き込まれたバイト数を返すため、charまたは char[] に割り当てることはできません。
const char* foo = "foo";
static char end[BUFSIZE];
snprintf(end, BUFSIZE, ""%s_bar", foo);
snprintf
セキュリティエラーであるバッファオーバーフローが簡単に発生しないため、使用することを好みます。snprintf が strlen(" s_bar ") + strlen("foo"); を返した場合、連結が成功したかどうかを確認できるようになりましたBUFSIZ
。end
あなたもできることは次のとおりです。
char end[BUFSIZE] = "foo_";
strncat( end, "_bar", BUFSIZ);
それはおそらくあなたが好きなものです。