0

printf() を含む c++ dll メソッドを呼び出す python メソッドがあります。

典型的な呼び出し:

method ("something")

しかし今、私は次のようなものを呼び出すことができなければなりません

method("%x %y %z")

そして、それはクラッシュしています。

% を非常に単純な方法でエスケープしました

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

1つしかない場合でもうまくいくようでした。(テキスト自体にどのような影響があるか正確にはわかりません...)

そのため、複数でテストしたところ、Debug Assertion Failure - Expression ("Incorrect format specifier", 0) が発生しました。

編集:受け入れられた回答の後、解決策:

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

2 に答える 2

2

バックスラッシュはエスケープ文字です。これを試して:

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

無効なフォーマット指定子エラーは、%z or %y有効なトークンを開始しないことによるものです。


あなたがやろうとしていることは少し混乱しています。私が言えることから、あなたはこれをやろうとしていると言えます:

// 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()は、それらを2倍にすることです(つまり%%)。"%s"ただし、渡された文字列の代わりに最初の引数として使用して、コード自体を修正する必要があります。

于 2012-07-25T01:07:21.023 に答える