C言語においてscanf関数は危険【続き】
fgets + sscanfの使用例
#include <stdio.h>
#include <string.h>int main(){
char buffer[256]={0};
int input;
printf("input num:");
while(fgets(buffer,sizeof(buffer),stdin) != NULL){
if(strlen(buffer)>255){
printf("サイズオーバー\n");
return 0;
}if(sscanf(buffer, "%d", &input)==1){
printf("input num is:%d\n",input);
}else{
printf("error\n");
}
printf("input num:");
}
return 0;
}/*260個の例
01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
*/
実行結果:
はい。
<追記>
このプログラムだとint型のオーバーフロー攻撃が可能ですわ。
long long int 使った方法がいいかも。
</追記>