| ア | イ | ウ | エ | オ |
| カ | キ | ク | ケ | コ |
| サ | シ | ス | セ | ソ |
| タ | チ | ツ | テ | ト |
| ナ | ニ | ヌ | ネ | ノ |
| ハ | ヒ | フ | ヘ | ホ |
| マ | ミ | ム | メ | モ |
| ヤ | ユ | ヨ | ||
| ラ | リ | ル | レ | ロ |
| ワ | ヰ | ヴ | ヱ | ヲ |
| ン |
| A | B | C | D | E |
| F | G | H | I | J |
| K | L | M | N | O |
| P | Q | R | S | T |
| U | V | W | X | Y |
| Z | 数字 | 記号 | ||
Cで、文字列書式に従って、「指定文字数分だけ」文字配列に書き込む関数。sprintfのセキュリティ向上版。
#include <stdio.h>
int snprintf(char *str, size_t size, const char *format, ...);
sprintfと比較して、snprintfでは第2引数として第1引数のサイズを記載するためのパラメーターが追加されている。
第2引数のsize_t sizeは、終端NULLバイト('\0')も含めたサイズを指定する。
第3引数に指定するフォーマット文字列は、sprintfやprintfと同じである。
この関数は、最大で第2引数-1文字だけ第1引数のバッファーに書き込み、第1引数の末端(size番目)には終端文字 '\0' を書き込んで返却する。
これにより、sprintfと同じ機能を、決してバッファーオーバーフローを起こすことなく実現することができる。
sprintfは、strcpy、strcatと共に、頻繁にバッファーオーバーフローを起こす、代表的な三大文字列関数の一つだった。
なぜなら、結果を格納する先の大きさを指定できないからである。
そこで現在は、第2引数に第1引数の大きさを記載する機能を追加したsnprintf関数が提供され、C99以降で標準化されている。
特段の理由がないのであれば、sprintfではなく、snprintfを用いるべきである。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます