我正在尝试在从 flex 发送的野牛中打印令牌值,但由于某种原因,打印的值在某些情况下是垃圾。
法典代码:
\".*\" {
std::string* s1 = new std::string(yytext);
std::string s2 = *s1;
std::string s3 = s2.substr(1,s2.size() - 2);
yylval.s = &s3;
return VARIABLE;
}
野牛代码:
%union{
std::string *s;
};
%type <s> expr
expr : VARIABLE { caps($1); }
void caps(std::string *str){
std::string str1 = *str;
for(std::string::size_type i=0;i<str1.length();i++)
std::cout << str1[i];
}
如果我输入长度小于 15 个字符的字符串,则输出正常,但如果长度超过它,则会打印垃圾。
如果我隔离 c++ 代码并运行它工作正常,我不明白为什么会发生,所以有人可以找到其中的错误。