読者です 読者をやめる 読者になる 読者になる

凡庸なる人のブログ

凡庸な自分が思ったことや何かしらの感想、コンピュータ系などの調べごとを書くブログです。  【結論】ってのは私個人の結論です。記事全体は個人的な調査結果や感想です。

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
*/

 実行結果:

f:id:wannabeahacker:20160222004219p:plain

はい。

 

<追記>

このプログラムだとint型のオーバーフロー攻撃が可能ですわ。

long long int 使った方法がいいかも。

</追記>