-1

即时铸造

char* something= reinterpret_cast<char*>(&GPBuffer);

而不是回到:

char temp1 [400];

string buffer = reinterpret_cast<string&>(temp1);

我知道将字符串转换为 char* 看起来很愚蠢,但这是我需要的并且它有效!

但是如果我将“某事”(抛出内部队列)传递给另一个线程,并且我尝试回退,我会收到:

0x00000000009bb2dd in std::basic_string, std::allocator >::operator= (this=0x48410790, __str=Traceback (最近一次调用最后): 文件 "/usr/share/gdb/python/libstdcxx/v6/printers.py" ,第 469 行,在 to_string 返回 self.val['_M_dataplus']['_M_p'].string (encoding, length = len) OverflowError: signed integer is less than minimum ) at /usr/lib/gcc/x86_64-redhat- linux/4.1.2/../../../../include/c++/4.1.2/bits/basic_string.h:486

有人熟悉这个错误吗?

4

2 回答 2

1

你拿一个普通的 char 数组,把它转换成字符串,然后期望它工作?你比我想象的要勇敢。

无论如何,您得到的错误来自调试器的 Python 脚本,该脚本试图以可读形式打印 std::string。由于您所拥有的只是一个有效的 std::string,因此脚本中的一些检查会触发并引发错误。这不是一个正常的 C++ 错误。

于 2013-06-20T18:07:21.753 回答
0

我会用一个void*

void* something = (void*)(&PGBuffer);

string my_fancy_string((char*)something)

除此之外,我不会使用 std::string 来保存原始数据的缓冲区,而只使用 char 数组,但这是您的选择。

于 2013-06-20T18:02:16.217 回答