尝试访问std :: string

时间:2016-09-23 16:50:49

标签: c++ c++11 pointers segmentation-fault stdstring

考虑这段代码:

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_pushto_push->value所指向的对象都是以dinamycally方式分配的。

1 个答案:

答案 0 :(得分:0)

您无法将任意void指针转换为字符串或任何其他类型。

如果value实际上是指向隐藏在void指针后面的std :: string的指针,则此C样式转换将工作。