在我的代码中,当我使用解析函数时,我得到unhandled expression error
。
在我的PopStack
函数中,这是删除向量的最后一个元素的正确方法。
错误是:
Boost_Test.exe中0x0f463b50(msvcr100d.dll)的未处理异常:0xC0000005:访问冲突写入位置0x00345d49。
class Stack
{
public:
Stack() {GlobalIndex=0; };
std::vector<char*> v;
int GlobalIndex;
void AddStack(char* txt);
void Parse();
void PopStack();
void PrintStack();
};
void Stack::Parse()
{
char* tok;
tok = strtok(v[GlobalIndex-1], ";");
while(tok!=NULL)
{
cout<<"\nThe time value is = "<<tok<<endl;
tok = strtok(NULL, " ");
}
}
void Stack::AddStack(char* txt)
{
v.push_back(txt);
GlobalIndex++;
}
void Stack::PopStack()
{
v.pop_back();
GlobalIndex--;
}
void Stack::PrintStack()
{
std::cout<<v[GlobalIndex-1]<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i;
Stack s;
s.AddStack("aaa;1.2");
s.AddStack("bbb;1.7;");
s.AddStack("ccc;2.2");
s.Parse(); // This gives a unhandled expression error
s.PopStack();
s.PrintStack();
return 0;
}
答案 0 :(得分:4)
发现令牌的结尾,在你的情况下,';'被替换为0。
此写操作在您传递的字符串文字上完成:
s.AddStack("aaa;1.2");
但是文字不可写,基本上是'const char *',因此访问违规。
答案 1 :(得分:2)
正如其他成员所建议的,我现在使用了c ++字符串和boost库。
#include "stdafx.h"
#include <iostream>
#include <asio.hpp>
#include <regex.hpp>
#include <algorithm/string/regex.hpp>
#include <string>
#include <algorithm/string.hpp>
using namespace std;
class Stack
{
public:
Stack() {GlobalIndex=0; };
std::vector<std::string> v;
string s;
int GlobalIndex;
void AddStack(std::string);
void Parse();
void PopStack();
void PrintStack();
};
void Stack::Parse()
{
std::vector<std::string> result;
boost::split(result,v[GlobalIndex-1],boost::is_any_of(";"));
cout<<"\nThe boost split is = "<<result[1]<<endl;
}
void Stack::AddStack(std::string txt)
{
v.push_back(txt);
GlobalIndex++;
}
void Stack::PopStack()
{
v.pop_back();
cout<<v.size()<<endl;
GlobalIndex--;
}
void Stack::PrintStack()
{
std::cout<<v[GlobalIndex-1]<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i;
Stack s;
s.AddStack("aaaaaa;1.2");
s.AddStack("bbbbb;1.7;");
s.AddStack("ccccc;2.2");
s.Parse();
s.PopStack();
s.PopStack();
s.PrintStack();
cin>>i;
return 0;
}