- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 ctypes 调用 C++ 库(用 extern C 包装)中的函数时遇到问题,该函数应该返回字符串。我很确定我已经将 ctypes 接口(interface)的 argtypes 和 restype 正确设置为一个应该返回字符串的函数,但无论如何我只得到一个空字符串作为返回结果。
C++ 代码:
const char* disasmC_PEProgram_getSections(PEProgram *p) {
return p->getSections().c_str();
}
Python 代码:
lib.disasmC_PEProgram_getSections.argtypes = [ctypes.c_void_p]
lib.disasmC_PEProgram_getSections.restype = ctypes.c_char_p
resultStr = lib.disasmC_PEProgram_getSections(self.peProgram_p)
# Displays empty string for resultStr!
print "Result: %s" % (resultStr,)
最佳答案
我的猜测是从 disasmC_PEProgram_getSections()
返回的值是一个局部变量或包含空值或其他内容。提供MCVE如果您需要更具体的帮助。
这是我的 MCVE,显示您的 Python 代码是正确的。请注意,我的 C++ 代码返回对对象中字符串的引用,以确保字符串的生命周期持续到对象被销毁为止。
测试.cpp
#include <string>
using namespace std;
#define API __declspec(dllexport) // Windows-specific export
class PEProgram
{
string section;
public:
PEProgram() : section("section") {}
const string& getSections() const { return section; }
};
extern "C" {
API PEProgram* PEProgram_new() { return new PEProgram(); }
API void PEProgram_delete(PEProgram* p) { delete p; }
API const char* disasmC_PEProgram_getSections(PEProgram *p) {
return p->getSections().c_str();
}
}
测试.py
#!python36
import ctypes
lib = ctypes.CDLL('test')
lib.PEProgram_new.argtypes = None
lib.PEProgram_new.restype = ctypes.c_void_p
lib.PEProgram_delete.argtypes = [ctypes.c_void_p]
lib.PEProgram_delete.restype = None
p = lib.PEProgram_new()
lib.disasmC_PEProgram_getSections.argtypes = [ctypes.c_void_p]
lib.disasmC_PEProgram_getSections.restype = ctypes.c_char_p
resultStr = lib.disasmC_PEProgram_getSections(p)
# Displays empty string for resultStr!
print(f'Result: {resultStr}')
lib.PEProgram_delete(p)
输出
Result: b'section'
请注意,如果我的类(class)是:
class PEProgram
{
public:
string getSections() const { return "section"; }
};
然后我得到 b''
作为 Python 中的值。这是因为 disasmC_PEProgram_getSections
返回的字符串现在是一个临时值,在函数 disasmC_PEProgram_getSections
返回后会被销毁。返回的 const char*
现在指向已释放的内存,并且会发生未定义的行为。
关于python - ctypes - 函数仅返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50989459/
我正在尝试用 Java 构建一个字符串,该字符串的长度最多为 3,最少为 1。 我正在根据整数数组的内容构建字符串,如果数组的内容为 -1,我想在字符串中输出一个空字符。否则字符串将包含整数的字符版本
我有一个类,其中有一个方法可以在字符串中包含 NUL 字符的情况下终止程序。具体表达是这样的: stringVar.indexOf('\u0000') < 0 这个字符串是通过 Scanner 从用户
我有一个 wchar_t 数组。我需要在数组中的特定位置添加一个 unicode 空字符。 wchar_t var1[100]; var1[79] = '\u0000'; 我尝试了上面的方法,但出现以
好吧,这听起来可能是重复的,但我已经尝试了所有可能性,例如 str.strip()、str.rstrip()、str.splitline (),还 if-else 检查像: if str is not
System.out.println("-----------------------------------------------------------"); System.out.pr
我有一个奇怪的问题。我从公司内部的许多不同应用程序接收数据,并将这些数据显示在网站上。根据发送数据的系统,数据本身可能在字符串中包含一些奇怪的字符。我的问题是我有一个用户可以搜索以允许其中包含此数据的
我遇到了 aSSL ,这似乎有几年历史了,想知道是否有人有其他“安全”AJAX 连接代码示例?显然,这不如使用 SSL 证书安全,但使用 null character SSL在那里进行攻击(最近针对
我有一个类似于以下内容的 pyspark 数据框: df = sql_context.createDataFrame([ Row(a=3, b=[4,5,6],c=[10,11,12], d='b
我有以下要执行的查询: MyModel.objects.annotate(current_name=Coalesce('nickname', 'name')).order_by('current_na
每当 rails 变量等于 nil(或者实际上每当我使用 rails 代码(参见第 3 个代码示例))时,我的 html 中就会得到一串空字符。 new.html.haml %h1.editable.
我是一名优秀的程序员,十分优秀!