以下のプログラムで全角10文字までを入力可能としているのに、「あ」と20文字入れても代入されてしまいます。
MAXDATAで11などの制限をかけるとそれ以上入力した場合にコアダンプで処理が落ちてしまうため、多く値をとることで改行文字かの判定をifで行っています。なぜ10文字以上でも代入されてしまうのでしょうか?
C
1#include <stdio.h> 2#include <string.h> 3 4#define MAXDATA 256 5 6int main(void) { 7 char test[MAXDATA]; 8 char flag = 0; 9 10 while (flag == 0) { 11 puts("何か文字を入力して、エンターキーを押してください"); 12 printf(">>"); 13 // 半角全角10文字以内を想定 14 fgets(test,MAXDATA,stdin); 15 if (test[11] <= '\n') { 16 printf("10文字以下で、%sと入力されました",test); 17 flag = 1; 18 } else { 19 // 範囲を超えて入力された場合のオーバーラン対策 20 if (strchr(test, '\n') == NULL) { 21 while (fgetc(stdin) != '\n'); 22 } 23 } 24 } 25 26 return 0; 27} 28
回答3件
あなたの回答
tips
プレビュー