C语言程序如何调用python程序

Python016

C语言程序如何调用python程序,第1张

下面是一个例子:

首先是python的一个简单函数

class Hello:

def __init__(self, x):

self.a = x

def print(self, x=None):

print(x)

def xprint():

print("hello world")

if __name__ == "__main__":

xprint()

h = Hello(5)

h.print()1

下面是C语言

#include <python3.4m/Python.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

Py_Initialize()

// 将当前目录加入sys.path

PyRun_SimpleString("import sys")

PyRun_SimpleString("sys.path.append('./')")

// 导入hello.py模块

PyObject *pmodule = PyImport_ImportModule("hello")

// 获得函数xprint对象,并调用,输出“hello world\n”

PyObject *pfunc = PyObject_GetAttrString(pmodule, "xprint")

PyObject_CallFunction(pfunc, NULL)

// 获得类Hello并生成实例pinstance,并调用print成员函数,输出“5 6\n”

PyObject *pclass= PyObject_GetAttrString(pmodule, "Hello")

PyObject *arg = Py_BuildValue("(i)", 5)

PyObject *pinstance = PyObject_Call(pclass, arg, NULL)

PyObject_CallMethod(pinstance, "print", "i", 6)

Py_Finalize()

return 0

}

编译命令如下:

gcc pyapi.c -lpython3.4m -o pyapi

如果要在test.py中调用脚本func.py脚本

首先,两个脚本文件要放在pythonpath下,其次在test.py脚本的开头写上import func,这样就可以直接调用func中的函数方法了。

简单看了一下你的程序

首先,你没有给出完整的程序,这个让大伙看起来确实不方便,因为没有main函数,可能踩内存的地方并不是这个函数本身,是main函数

其次说你的这个函数,貌似确实有点问题,但是由于没有完整的程序,我只说出我的理解,如果有错,直接忽视就好

sprintf(flag_height,"%03d",i+1)

sprintf(flag_width,"%03d",j+1)

我觉得问题出在这里,你查下 sprintf 的用法,第一个参数应该是一个字符串的首地址,你写的确实没有错,参数给入的是一个地址flag_height,但是纵观你的程序,你并没有给这个指针赋值,程序运行到这里,估计在默认创建指针的时候应该赋值为NULL(貌似根据编译器不同而有不同),那个寻址后报出段错误,也是意料之中了

由于没有你完整的代码,不知道你要做什么,修改意见不好提

给出个人意见,仅供参考

如果要打印flag_height中的值,首先应该给flag_height指针分配一片内存,使用malloc函数,其次在向内从中写入值,然后调用sprintf,就应该没有问题了