我有一个我想从事的项目,我的首要任务是构建一个 deskCalculator。我希望计算器能够解析 HEX 数字。以下是有问题的部分。
| HEX {$$ = strtol((char *)$1 , (char **)'\n', 16); }
上面定义了一个十六进制标记,在 lex 文件中正则表达式定义为
hex [a-f0-9]+
问题出在 strtol 函数级别。请帮我。 谢谢。
最佳答案
编译器的提示是有充分理由的,而强制转换几乎从来都不是正确的答案。
strtol
将指向转换字符串后第一个字符的指针存储到 end
参数中。因为 10
('\n'
的值)可能不是您的有效地址,所以当 strtol
尝试修改它。如果您对字符串的其余部分不感兴趣,可以传递 NULL
:
| HEX {$$ = strtol((char *)$1 , NULL, 16); }
关于c - 如何在 Bison 中解析 HEX 数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806289/