2016-12-31 90 views
-1

我想在C++中嵌入代碼python。我有這樣的Python代碼:如何在C++中插入python代碼?

#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; 
} 

,但我想是這樣的事情:

包括

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

,但它不工作。我的意思是我想用python來顯示變量a的值。 謝謝:)

+0

look up sprintf() –

回答

1

您必須在C代碼中使用正確的C語法;在C中,"a = "+a確實是而不是連接字符串(正如您可能會假設的那樣),但計算一個無用的指針,指向常量字符串"a = "開頭後面的a字節。 a5,在那個地方沒有用處。

在C中連接字符串並不那麼簡單;你需要爲目標準備記憶等。將數字轉換爲字符串也是如此。例如:
char buffer[30];
sprintf(buffer,"a = %d\n",a);

然後
PyRun_SimpleString(buffer);

+0

好吧,那麼「正確的語法」是什麼?我想用,而不是+ a? – user7360594

2

你可以使用std::to_stringint轉換爲字符串,然後使用std::string::c_str獲得臨時const char*內部數據的函數調用的持續時間:

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

與任何'sprintf'建議相反,'std :: to_string'是一個C++解決方案 – chtz