いつもお世話になっております。
VC++6.0 Console Appricationにて
HTTPクライアントを作成中なのですが、
サーバーから受信を行う際に
同じループ内にrecv()関数とprintf()関数を使用しています。
そのときに、たとえばwww.yahoo.comにアクセスしようとすると
Debug Error!
R6002
- floating point not loaded
というエラーがポップアップで出てしまいます。
何が原因なのかご教示お願い致します。
ループ部分のソースを下記に載せておきます。
int nRecv, i;
for(i = 0; i < MAX_RECV; i++)
{
memset(buf, '\0', sizeof(buf));
nRecv = recv(pms->s, buf, (int)sizeof(buf) - 1, 0);
printf(buf);
fprintf(fp, "%s", buf);
if (nRecv == 0){
cout<<endl;
fclose(fp);
break;
}
}
>printf(buf);
これはやってはいけません。
(v)(s/f)printfでユーザー入力の文字列を出力したい場合は,
printf("%s", buf);
のようにしてやる必要があります。
というのは,
bufに%が含まれた場合にバグ,さらには脆弱性の原因となるからです。
R6002自体は,浮動小数点演算を行っていないのに,printfで%fを使った場合などに発生します。
よくやる逃げ方は,
double d = 0.0;
のような定義を加えてやることで,
強制的に浮動小数点演算ライブラリを読み込ませることです。
# そもそも,このエラーは普通は起きない……。
ツイート | ![]() |