.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

詳細

BOFを起こす関数

以下の様に、BOFを引き起こす可能性がある引数チェックされない関数が多い。

#関数代替案/対策用法備考
1char *gets(char *s)
標準入力から一行を取り込む。
char *fgets(char *s, int n, FILE *stream);fgets(dst , sizeof(dst) , stdin);gets と異なり
・引数に最大読み込み文字数を指定する。
・改行文字も 1文字として数える。
・実際読むのはn-1で最後は終端ナル(NULL)文字になる。
 ・終端記号は、末尾の改行を置換ではなく改行の後ろに付与
 ・最大文字数を超えた場合でも終端ナル(NULL)文字を保証
2char *strcpy(char *dst, const char *src);
src文字列をdst文字列バッファに'\0' までコピー
void *memset(void *buf, int ch, size_t n);
char *strncpy(char *dst, const char *src, size_t n);
memset(dst, 0 , sizeof(dst));
-> strncpy(dst, src, sizeof(dst) - 1);
・コピーされる文字の長さは、src長とnのいずれか小さい方。
・src長がnより短い場合、終端ナル(NULL)文字を保証
3char *strcat(char *dst, const char *src);
src文字列をdst文字列バッファに'\0' まで連結
char *strncat(char *dst, const char *src, size_t n);strncat(dst, src, sizeof(dst) - strlen(dst) - 1)・文字列連結される文字の長さは、src長とnのいずれか小さい方。
・src長がnより短い場合、終端ナル(NULL)文字を保証
4int sprintf(char *dst, const char *format, ...);
可変個引数をstring.Format()的に処理しdst文字列バッファに格納。
sprintf(dst, ”%.{B}s”, data){B} = 書式指定子の精度(最大文字数)
= dstの要素数 - 書式指定子以外の文字数 - 1(終端ナル(NULL)文字)
5int snprintf(char *dst, size_t n, const char *format, ...);snprintf(dst, sizeof(dst), ”%s”, data)動作としては、fgets()に近く、実際読むのはn-1で最後は終端ナル(NULL)文字になる。
6int scanf(const char *format, ...);
標準入力から空白、タブ、改行で分割された文字列を読みstring.Format()的に処理し格納可変個引数に格納。
scanf(”%.{B}s”, dst){B} = 書式指定子の精度(最大文字数)
= dstの要素数 - 書式指定子以外の文字数 - 1(終端ナル(NULL)文字)
7int sscanf(char *src, const char *format, ...);
src文字列をstring.Format()的に処理し格納可変個引数に格納。
sscanf(src, ”%.{B}s”, dst){B} = 書式指定子の精度(最大文字数)
= dstの要素数 - 書式指定子以外の文字数 - 1(終端ナル(NULL)文字)
8int fscanf(FILE *fp, const char *format, ...);
ストリームをstring.Format()的に処理し格納可変個引数に格納。
fscanf(fp, ”%.{B}s”, dst){B} = 書式指定子の精度(最大文字数)
= dstの要素数 - 書式指定子以外の文字数 - 1(終端ナル(NULL)文字)
9getchar();, fgetc(fp);, getc(fp);
入力から一文字を取り込む。
使用する際にバッファ境界チェックを行う。

パターン

各種領域


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS