Tag: struct

C中的Mmap和struct

我想在C中用mmap读写结构。 我有一个名为insert_med的函数,它允许在mmap中插入一个新的struct med ,并且每个struct(带有一个唯一的键 )都必须写在数组的不同位置(当添加一个新结构时,它必须是添加在数组的最后一个空位置)。 两个结构med不能具有相同的密钥,如下面的代码所示。 关键是独一无二的。 我的代码不起作用 – 带有变量“struct map”的错误消息:声明时和文件准备好mmapped时 – 但我不知道为什么。 我想我可能做错了事。 #include #include #include #include #include #include #include #define FILEPATH “/tmp/mmapped.bin” #define NUMINTS (1000) #define FILESIZE (NUMINTS * sizeof(int)) struct med{ int key; char name[25]; int quant_min; int quant; }; insert_med(int argc, char *argv[]){ int i; int fd; int result; struct map*; […]

如何使用Python优雅地发送/接收大型C结构?

我已经开始编写Python 3.x客户端应用程序了。 服务器应用程序已经存在并用C语言编写。服务器提供了一个C头文件,其中包含两个用于通过UDP发送和接收数据的结构的定义(我正在使用Python的socket模块)。 问题是C结构非常大(每个大约200个元素)。 如果我使用Python的struct模块来打包/解包数据,那么一个不那么优雅的解决方案就是手动打包/解包200个元素,如: struct.pack(‘H…I’, data1, …, data200) 此外,我希望能够使用类似C的语法访问Python中的接收/发送元素。 例如,如果我在C服务器端 send.data.pos = pos; 如果我可以像这样访问Python客户端中的pos变量,那将是很好的(最自然的): pos = recv.data.pos 请注意,问题不在于如何从头文件中自动编写Python结构,就像在这个线程中一样(我在Python中逐个编写每个结构字段没有问题),而是什么是最好的组织方式Python中的数据(例如在类中,使用字典等),这将允许我利用Pythonfunction并使代码更简单,数据易于访问(我宁愿只使用Python标准模块,也不使用外部软件)。 实现这一目标最优雅的方法是什么?

使用C ++方式对结构和数组进行别名

这是我的另一个问题的 C ++后续 在ISO C之前的旧时代,以下代码会让人感到惊讶: struct Point { double x; double y; double z; }; double dist(struct Point *p1, struct Point *p2) { double d2 = 0; double *coord1 = &p1->x; double *coord2 = &p2->x; int i; for (i=0; i<3; i++) { double d = coord2[i] – coord1[i]; // THE problem d2 += d * […]

在C中表示抽象语法树

我正在C中为一个简单的玩具语言实现一个编译器。我有一个工作的扫描器和解析器,以及AST的概念function/构造的合理背景。 我的问题与在C中表示AST的具体方式有关。我在网上不同的文本/资源中经常遇到三种风格: 每种节点一个结构。 它有一个基节点“class”(struct),它是所有子结构中的第一个字段。 基节点包含一个存储节点类型的枚举(常量,二元运算符,赋值等)。 使用一组宏访问结构的成员,每个结构一个集。 它看起来像这样: struct ast_node_base { enum {CONSTANT, ADD, SUB, ASSIGNMENT} class; }; struct ast_node_constant { struct ast_node_base *base; int value; }; struct ast_node_add { struct ast_node_base *base; struct ast_node_base *left; struct ast_node_base *right; }; struct ast_node_assign { struct ast_node_base *base; struct ast_node_base *left; struct ast_node_base *right; }; #define CLASS(node) ((ast_node_base*)node)->class; […]

使用C中的字符指针为结构分配内存

我今天很难修复代码,然后我遇到类似的东西: typedef struct { int a; int b; int c; int d; char* word; } mystruct; int main(int argc, char **argv){ mystruct* structptr = malloc(sizeof(mystruct)); if (structptr==NULL) { printf(“ERROR!”) … } … free(structptr); return 0; } 由于char* word是一个可变长度的字符串,而且malloc没有为它分配足够的内存,因此代码提供了大量的内存错误。 实际上它只为整个struct分配了20 Bytes 。 有没有解决这个问题的方法,而不是将char*变成像char word[50] ?

C:typedef结构中的函数指针

我试图在C中创建一个链接列表,但试图在一些C ++样式类中很好地打包它。 我有一些问题,但在C中使用函数指针。 typedef struct linkedList { int count; struct msgNode *front; struct msgNode *back; void (*addMSG)(unsigned char *, int, struct linkedList *); } msgList; void addMSG(unsigned char *data, int size, struct linkedList *self); 理想情况下,我希望你可以让你列出然后添加你可以简单地在结构中调用一个“方法”(函数),模拟你在C ++中看到的行为。 当我调用addMSG时,我得到了一个分段错误,当然这是因为addMSG没有指向一个函数。 但是,我不想指定一个函数指向我想要使用链表的每一次。 有没有很好的方法来获得函数指针而不必隐式地指向函数,或者你是否必须隐式地指向函数? 这只是这里显示的部分实现。 最后,这个结构将具有所有必要的function。 这只是为了让这个问题简短而重要。

Lisp中C结构的惯用等价物是什么?

在C类语言中,从一开始就在每本入门书中都强调结构/记录和对象。 然后,他们的完整系统围绕管理这些结构,它们的相互关系和inheritance而设计。 在Lisp文档中,你通常可以找到1-2页关于Lisp“也”如何有一个defstruct,一个简单的例子,通常就是这样。 而且,根本没有提到结构的嵌套。 对于来自C背景的人来说,首先看来,分层组织不同的数据类型不是Lisp中的首选方法,但除了CLOS之外,CLOS是一个完整的对象系统,如果你只是想要结构,那就太复杂了,除了疯狂一切之外在列表中,没有明显的方法来转移您的C结构知识。 什么是层次组织数据的惯用Lisp方法,最类似于C结构? – 我认为我的问题的总结答案是:对于初学者学习目的,可以使用defstruct和/或plists,虽然“遗留特征”,因为它们最接近C结构,但是它们已经被更多地取代了灵活的defclass / CLOS,这是大多数Lisp程序今天使用的。 这是我关于SO的第一个问题,所以感谢大家的回答。

clock_t,time_t和struct tm有什么区别?

clock_t,time_t和struct tm有什么区别? struct tm看起来像这样: struct tm{ int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; 但是clock_t和time_t怎么样?

c结构中的压缩位字段 – GCC

我在linux上使用c中的结构。 我开始使用位字段和“打包”属性,我遇到了一个奇怪的行为: struct t1 { int a:12; int b:32; int c:4; }__attribute__((packed)); struct t2 { int a:12; int b; int c:4; }__attribute__((packed)); void main() { printf(“%d\n”,sizeof(t1)); //output – 6 printf(“%d\n”,sizeof(t2)); //output – 7 } 为什么两个结构 – 完全相同 – 采用不同的字节数?

从ELF目标文件转储C结构大小

如何从带有调试符号的ELF目标文件中提取所有C结构的大小? 可以使用“print sizeof(some_struct)”从GDB获取单个结构大小,但我需要的是获取所有结构的列表。 我看过“nm”和“objdump”,但我看不到做我正在寻找的选项。 有没有办法用标准的Unix工具做到这一点,或者我是否需要从ELF文件中提取调试符号部分并自行处理? 我希望不是后者。 提前感谢任何建议。 射线