8

重複の可能性:
boost:split() を呼び出すと、なぜ多くの警告が表示されるのですか?

だから、これは私のコードです:

Account ParseString(string data){
    vector <string> fields;
    boost::split( fields, data, boost::is_any_of( "a,;" ));
    int limit = fields.size();
    for(int i = 0; i < limit; i++)
        cout << fields[i] << endl;
}

これは、コンパイルしようとしたときに得られるものです。

d:\program files (x86)\visualstudio\vc\include\xutility(2227): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'

私の質問は、私は何を間違えたのですか?これらのエラー メッセージを防ぐにはどうすればよいですか?

4

2 に答える 2

12

あなたは何も悪いことをしていません。Visual Studio は過度に慎重です。デバッグ モードでは、Visual Studio は "Checked Iterators" と呼ばれるものを使用します。ポインタもイテレータですが、チェック メカニズムは動作しません。そのため、標準ライブラリ アルゴリズムがポインターを使用して呼び出されると、boost::splitこの警告が発行されます。

この明らかに安全なコードでも同じ警告が表示されます。

int main()
{
    int x[10] = {};
    int y[10] = {};
    int *a = x, *b = y;
    std::copy(a, a+10, b);
}

警告を無効にします。初心者向けです。初心者の安全のためにデフォルトでオンになっています。デフォルトでオフになっていると、オンにする方法がわからないからです。

于 2013-01-03T15:25:10.080 に答える
1

あなたは何も悪いことをしていませんし、警告を見てもそれほど怖くはないようです :) また、この場合、その警告に対して何らかのアクションを実行する必要はないと私は信じています。

于 2013-01-03T15:22:34.687 に答える