考虑这段代码:
std::string* symbol = (std::string*) to_push->value;
printf("Got symbol\t%s\n", symbol->c_str());
switch ((symbol->operator[](0)) {
此处,to_push
是指向具有value
类型属性void*
的对象的指针。所以我将该值转换为std::string*
,因为我需要知道它的内容是什么。
在第二行,添加以了解段错误发生的位置,我也尝试打印该字符串的值,它始终有效。
在最后一行,当我最终尝试将该字符串的第一个字符与可能性列表进行比较时,我得到了一个分段错误错误。您在此处看到我尝试通过引用它的运算符[0]
whitout访问该字符串。我还尝试了许多其他组合,例如*(symbol->c_str())
或(*symbol)[0]
,但我总是会遇到分段错误错误。
为什么?我做错了什么?
如果它有用,to_push
和to_push->value
所指向的对象都是以dinamycally方式分配的。
答案 0 :(得分:0)
您无法将任意void指针转换为字符串或任何其他类型。
如果value
实际上是指向隐藏在void指针后面的std :: string的指针,则此C样式转换将仅工作。