2015-03-24 100 views
0

我想在Visual Studio 2012 C++程序中使用Python的C API在嵌入式Python环境中定义的字符串变量的值。从PyUnicode_AsWideCharString返回只有一个字符

随着嵌入式环境中,我使用Python 3.4.3 64位,这是我从https://www.python.org/downloads/

这是下载我使用的Visual Studio 2012的代码(目标:发行,64):

#include <Python.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    Py_Initialize(); 

    PyObject *main = PyImport_AddModule("__main__"); 
    PyObject *globals = PyModule_GetDict(main); 
    PyRun_SimpleString("my_var = 'Hello, World!'; print('Value of my_var in Python: ' + my_var)"); 

    PyObject* value = PyDict_GetItemString(globals, "my_var"); 
    wchar_t* fetched_value = PyUnicode_AsWideCharString(value, NULL); 
    Py_DECREF(value); 

    wchar_t result[20]; 
    wcscpy_s(result, 19, fetched_value); 
    PyMem_Free(fetched_value); 

    printf("Value of my_var in C: %s", result); 

    Py_Finalize(); 

    return 0; 
} 

当我运行这段代码,我得到这样的输出:

Value of my_var in Python: Hello, World! 
Value of my_var in C: H 

为什么会出现只有Hello, World!的第一个字符我呼吁PyUnicode_AsWideCharString(value, NULL);

回答

3

%s格式说明符表示窄字符串(char*)。你想%ls,它表示一个宽字符串(wchar_t*):

printf("Value of my_var in C: %ls", result); 

你也应该喜欢wprintf;混合狭窄和宽阔的琴弦并不是一个好主意,就像你在这里做的那样。

+0

行动!谢谢,我真的看错了地方。 – Pep 2015-03-24 23:28:27

相关问题