无法访问const char数组的值

时间:2015-06-28 03:21:35

标签: python c string segmentation-fault ctypes

假设我在名为libmylib.so的C库中有以下代码:

static char mystr[9];

/* somewhere else this array is populated with a value 8 bytes or less */

const char *
get_mystr (void)
{
  return mystr;
}

从Python解释器,我调用以下

from ctypes import *
mylib = CDLL('libmylib.so')

加载库。现在,我将变量设置为mystr

x = mylib.get_mystr()

如果我尝试检查x的值或其任何属性,我会遇到分段错误。在提示符下键入TAB后查看哪些字段/功能可用会导致段错误,甚至使用x.

发生了什么事?

编辑:如果我检查x本身,我会得到一个内存地址,如预期的那样。如果我尝试检查x.value或查看可用字段,则会崩溃。

编辑2:我尝试检查static声明是否是我的问题的根源,但如果没有它,它似乎表现相同。

1 个答案:

答案 0 :(得分:1)

@eryksun指出C函数的restype默认为int并被解析为Python整数。

通过调用mylib.get_mystr.restype = c_char_p,它现在可以正确解析为可以正确解码的bytes对象。