0

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

典型调用:

method ("something")

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

method("%x %y %z")

它正在崩溃。

我用一个非常简单的方法逃脱了 %

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

它似乎适用于只有一个的情况。(不确切知道它对文本本身有什么影响......)

所以我测试了不止一个,我得到了一个调试断言失败 - 表达式(“不正确的格式说明符”,0)。

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

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

2 回答 2

2

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

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

您的无效格式说明符错误来自%z or %ynot 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!");
于 2012-07-25T01:06:11.230 回答
1

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

于 2012-07-25T01:07:21.023 回答