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 使用一种叫做“检查迭代器”的东西。指针也是迭代器,但检查机制不适用于它们。因此,当使用指针调用标准库算法时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 回答