2016-12-31 1 views
-1

私はコードのPythonをC++に埋め込むことを試みています。C++でPythonコードを挿入するには?

int main(int arg) 
{ 
    Py_SetProgramName(argv[0]); 
    int a = 5; 
    Py_Initialize(); 
    PyRun_SimpleString("a = " + a); 
    Py_Finalize(); 
    return 0; 
} 

を含むが、それは動作しません:

#include <Python.h> 

int main(int arg) 
{ 
    Py_SetProgramName(argv[0]); 
    Py_Initialize(); 
    PyRun_SimpleString("from time import time,ctime\n" 
         "print 'Today is',ctime(time())\0"); 
    Py_Finalize(); 
    return 0; 
} 

しかし、私がしたいことのようなものです:私はこのPythonコードを持っています。私はPythonで変数aの値を表示したいのです。 ありがとうございました:)

+0

lookup sprintf() –

答えて

1

Cコードで正しいC構文を使用する必要があります。 "a = "+aは文字列を連結しますが、定数文字列"a = "の後ろにaバイトを示す無駄なポインタを計算します。 a5の場合、その場所では何も役に立ちません。

文字列を連結することはC言語では単純ではありません。ターゲットなどのメモリを準備する必要があります。数値を文字列に変換する場合も同じです。
char buffer[30];
sprintf(buffer,"a = %d\n",a);

、その後
PyRun_SimpleString(buffer);

+0

「正しい構文」とは何ですか?私は+ aの代わりにaを使うと思った? – user7360594

2

あなたのintを文字列に変換するにはstd::to_stringを使用して、関数呼び出しの間、内部データへの一時的なconst char*を取得するためにstd::string::c_strを使用することができます:たとえば

PyRun_SimpleString(("a = " + std::to_string(a)).c_str()); 
+1

'sprintf'の提案とは対照的に、' std :: to_string'はC++の解決策です – chtz

関連する問題