首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ctype中的结构

ctype中的结构
EN

Stack Overflow用户
提问于 2021-11-23 07:05:55
回答 1查看 41关注 0票数 1

我是第一次接触ctypes。我已经用c编写了一个使用structure的函数,我想在python中使用ctype来调用它。如果我在linux中编译和运行,没有错误。但是如果我使用python做这件事,它会抛出错误。

C程序

代码语言:javascript
复制
#include<stdio.h>
struct add1{
        int a;
        int b;
};

int main(){
        int c;
        struct add1 s;
        printf("Enter 2 no :\n");
        scanf("%d%d",&s.a,&s.b);
        c = s.a + s.b;
        printf("C is : %d",c);
        return c;
}
代码语言:javascript
复制
obj = CDLL("./add12add1.so",mode=1)
print(obj)
#print(obj.add1)


class s(Structure):
    _fields_ = [("a",c_int),("b",c_int)]

c = s(8,9)
#print(c.add1)
print(c.a)
print(c.b)
print(c.a+c.b)
print(c.add1)

AttributeError:“%s”对象没有属性“add1”

如何解决这个错误?

EN

回答 1

Stack Overflow用户

发布于 2021-11-23 07:25:06

您有一个在C代码中命名为"add1“的结构,但在python代码中命名为"s”。它们都有名为"a“和"b”的字段,但都没有名为"add1“的字段。你可以在两个程序中为结构和字段使用不同的名称,它们只需要将数据对齐即可。不过,通常情况下,人们会尽量保持相同的名称,以避免混淆。我认为这就是这里发生的事情。与C代码匹配的python代码是

代码语言:javascript
复制
class add1(Structure):
    _fields_ = [("a",c_int),("b",c_int)]

s = add1(8,9)
print(s.a)
print(s.b)
print(s.a+s.b)

s.add1不存在于python或C代码中,因为add1不是这两种结构的成员。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70076640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档