python字符串使用特殊字符发送到c++ dll,崩溃

Posted

技术标签:

【中文标题】python字符串使用特殊字符发送到c++ dll,崩溃【英文标题】:python string uses special characters to send to c++ dll, crashes 【发布时间】:2012-07-25 01:01:53 【问题描述】:

我有一个调用 c++ dll 方法的 python 方法,其中包含 printf()。

典型通话:

method ("something")

但现在我必须能够调用类似的东西

method("%x %y %z")

它正在崩溃。

我已经逃过了%,很简单

if msg:            
    msg = msg.replace( "%", "/%" )

它似乎适用于只有一个的情况。 (不知道具体对文字本身有什么影响……)

所以我测试了不止一个,我得到了一个 Debug Assertion Failure - Expression ("Incorrect format specifier", 0)。

编辑:接受答案后,解决方案:

if msg:            
   msg = msg.replace( "%", "%%" )

【问题讨论】:

【参考方案1】:

反斜杠是转义字符。试试这个:

if msg:            
  msg = msg.replace( "%", "\%" )

您的无效格式说明符错误来自%z or %y not begin valid tokens。


您正在尝试做的事情有点令人困惑。据我所知,您正在尝试这样做:

// Insert your string elements in python, before calling C functions.
method("%s %s %s" % ("Hello", "python", "world!")

或者这个:

// Set the string format in python and pass to C function
method("%%s %%s %%s")

// In C function
char buf[128];
// Print your string with your custom format.
printf(GetStringFormatFromPython(), "Hello", "python", "world!");

【讨论】:

对不起,我复制错了,这就是我的代码(反斜杠) 好的。好吧,我认为 Ignacio 对printf 令牌有一个很好的看法。您是要插入到您的字符串 python 端,还是在 c++ 中?因为这些标记在 c++ 中仍然无效。 谢谢。我会测试,到目前为止,我已经修改了我的 python 并让它运行,但我想在 c++ 中做一些事情,这样 python 可以做它想做的任何事情。感谢您的帮助。【参考方案2】:

sprintf() 等中转义百分号的方法是将它们加倍(即%%)。但是代码本身需要通过使用"%s"作为第一个参数而不是传递的字符串来修复。

【讨论】:

我认为这是我需要的——但在哪里?而不是 const char ? sprintf("%s", variable_passed_in); 我做了:“char new_msg[80]; sprintf(new_msg, "%%s", msg);"我得到了“%s”。这是正确的方法,不是吗? 你已经逃脱了“%s”中的“%”。你不能那样做。

以上是关于python字符串使用特殊字符发送到c++ dll,崩溃的主要内容,如果未能解决你的问题,请参考以下文章

将字符串从 C# 发送到 C++ dll 文件

C++ DLL 注入:带有特殊字符的路径

将 C# 字符串作为参数发送到非托管 C++ DLL 函数

将字符串从 C# 发送到 C++

C++ 跨进程通信

python 传递结构体指针到 c++ dll