e28.c
標準ヘッダを使おう





#include <string.h> 追加して下さい!!
char str1[] = "文字列1" ;
char str2[] = "文字列2" ;
int main()
{
if(strcmp(str1,str2,6) == 0) {
処理;
} else {
処理;
}
return(0) ;
}
解説:
このプログラムは、
strncmp()を使用すべき所で、
strcmp() を使用したBUGです。
関数の引数ミスは昔から、よくあるBUGです。
UNIX関数の場合、
<string.h>の中にプロトタイプ宣言があるので、
これを利用しない手はありません。
コンパイル時にBUGが見つかります。
自分で作成した関数で、
外部関数の場合はヘッダファイルの中でプロトタイプ宣言して下さい。
static関数の場合はモジュールの先頭でプロトタイプ宣言して下さい。
このプロトタイプ宣言を記述する事で
コンパイル時にBUGが見つかります。
でも、K&Rコンパイラでは見つけられません。
C-FAQ 1.7J 7.6J 7.19J
13.5J 13.24J 15.1J
C-FAQ 1.7E
を参照して下さい。