向量下标超出范围C ++(substring)

时间:2013-12-28 19:51:45

标签: c++ visual-studio substring

所以我遇到了子串的这个问题并将它们转换成整数。这可能是一个简单的解决办法,但我找不到答案。

所以我收到这个字符串“12-12-2012”,我想拆分它,转换成整数并调用这样的修改方法:

string d = (data.substr(0,data.find("-")));
setDia(atoi(d.c_str()));

但是当我试图转换成整数时,它给了我标题中提到的错误。

修改 事实证明,该字符串实际上并不包含' - ',但这实在令人困惑,因为参数中的字符串来自:to_char(s.diaInicio,'dd-mm-yyyy')

更多信息:我使用了调试器并正确进行拆分,因为atoi接收的值是12(第一次拆分)。但我不知道为什么VS无法转换为整数,即使传递的字符串是“12”。

2 个答案:

答案 0 :(得分:0)

data不包含-时,此代码无法保存。

试试这个:

std::size_t p = data.find("-");
if(p == std::string::npos) {
    // ERROR no - in string!
}
else {
    std::string d = data.substr(0,p);
    setDia(atoi(d.c_str()));
}

答案 1 :(得分:0)

请使用非常简单的程序复制问题。如果你说的是正确的,那么下面的程序也应该失败(取自Danvil的例子,而不是调用未知的(对我们来说)setDia()函数):

#include <string>
#include <cstdlib>
using namespace std;
int main()
{
   string data = "12-12-2012";
   std::size_t p = data.find("-");
   if(p == std::string::npos) {
    // ERROR no - in string!
   }
   else {
       std::string d = data.substr(0,p);
       atoi(d.c_str());
    }
}