所以,这是我的代码:
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'
我的问题是,我做错了什么?我该怎么做才能防止这些错误消息?
答案 0 :(得分: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);
}
禁用警告。这是初学者。它默认为初学者的安全,因为如果它默认关闭,他们将不知道如何打开它。
答案 1 :(得分:1)
你没有做错任何事情,如果你看一下警告它似乎并不可怕:)我也相信在这种情况下你不需要对那个人采取任何行动。