Tag: struct

联合中的填充是否存在

大家好, 我想知道联盟是否使用填充? 由于union的大小是最大的数据成员大小,最后是否可以填充?

如何在C中的结构中初始化const(使用malloc)

我试过了; void *malloc(unsigned int); struct deneme { const int a = 15; const int b = 16; }; int main(int argc, const char *argv[]) { struct deneme *mydeneme = malloc(sizeof(struct deneme)); return 0; } 这是编译器的错误: gereksiz.c:3:17: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token 而且,这也是; void *malloc(unsigned int); struct deneme { const […]

什么是哈希表,你如何在C中创建它?

我对一个称为哈希表(也称为关联数组)的数据结构以及如何在C中实现它有几个问题。 你如何在C中创建哈希表? 什么是哈希表,你如何实现它? 为什么我要使用哈希表而不是数组? 注意:我知道这是一个非常广泛的问题,需要大量的答案,但我这样做是因为我有些人问我这是什么。 所以我把它放在这里,以充分解释它并帮助其他任何人。

如何在c / c ++中使用指针传递struct数组?

在C代码中,我坚持将一个struct数组传递给一个函数,这里的代码类似于我的问题: typedef结构 { int x; int y; char * str1; char * str2; } Struct1; void processFromStruct1(Struct1 * content []); int main() { Struct1 mydata [] = {{1,1,“black”,“cat”}, {4,5, “红”, “鸟”}, {6,7, “褐色”, “狐狸”}, }; processFromStruct1(MYDATA); //!怎么样? 找不到正确的语法 返回0; } void processFromStruct1(Struct1 * content []) { printf(“%s”,content [1] – > str1); //如果我想打印’red’,这是对的吗? … } msvc中的编译错误是这样的: […]

找到结构中填充的大小和位置的方法?

我正在尝试编写一个工具,将一些包含结构的C代码作为输入。 它将编译代码,然后查找并输出编译器决定添加到其中的结构的任何填充的大小和偏移量。 对于使用offsetof,sizeof和一些添加的已知结构,这是非常简单的,但我无法想出一个简单的方法来自动为任何输入结构做。 如果我知道如何遍历结构中的所有元素,我想我可以毫无问题地编写工具,但据我所知,没有办法做到这一点。 我希望一些StackOverflow人会知道一种方式。 但是,我并没有停留在我的方法中,而且我当然愿意接受在结构中查找填充的任何替代方法。

为什么sys / queue.h中的双向链表保持前一个下一个元素的地址?

我正在从FreeBSD学习sys/queue.h ,我有一个问题: 在sys/queue.h , LIST_ENTRY定义如下: #define LIST_ENTRY(type) \ struct { \ struct type *le_next; /* next element */ \ struct type **le_prev; /* address of previous next element */ \ } 为什么它保持前一个下一个元素的地址 ( struct type **le_prev )而不是像struct type *le_prev那样的前一个元素 ?

C – 将结构写入文件(.pcap)

我正在尝试编写.pcap文件,这可以在Wireshark中使用。 为了做到这一点,我有几个结构,我需要写入文件的各种数据类型。 (见代码) 所以,我创建结构实例,填写数据,使用FILE * fp = fopen(“test.pcap”,“w”),然后我不确定如何正确地将它写入文件。 我相信我应该使用memcpy,但我不确定最好的方法。 我过去主要使用C ++库来执行此操作。 有什么建议? typedef struct pcap_hdr_s { uint32_t magic_number; /* magic number */ uint16_t version_major; /* major version number */ uint16_t version_minor; /* minor version number */ int32_t thiszone; /* GMT to local correction */ uint32_t sigfigs; /* accuracy of timestamps */ uint32_t snaplen; /* max […]

malloc一个struct指针数组

我有以下结构: typedef struct _chess { int **array; int size; struct _chess *parent; } chess; 我有: typedef struct _chess *Chess; 现在,我想创建一个动态长度数组来存储指向struct结构的指针,所以我做了以下内容: Chess array [] = malloc(size * sizeof(Chess)); 这给了我一个错误:初始化程序无效。 如果我放弃[]并执行此操作: Chess array = malloc(size * sizeof(Chess)); 它编译没有错误,但当我尝试通过执行以下操作将此数组的元素设置为NULL: array[i]=NULL; 我收到一个错误:从类型’void *’分配类型’struct _chess’时出现不兼容的类型 知道我做错了什么吗? 谢谢。

使用赋值而不是memcpy()在C中复制结构

直到最近,我才看到用memcpy()复制结构字段。 在类和在线指令中,将一个结构的内容复制到另一个结构中通常看起来像 struct block *b0 = malloc(sizeof(struct block)); struct block *b1 = malloc(sizeof(struct block)); /* populate fields in *b0 */ memcpy(b1, b0, sizeof *b1); /* copy contents of b0 into b1 */ /* free b0, b1 */ 但是,也可以通过替换memcpy()的简单赋值来完成此任务。 *b1 = *b0; /* dereferenced struct assignment */ 有没有充分的理由说明为什么它没有被广泛使用(至少在我有限的经验中)? 这两个方法是赋值和memcpy()等价,还是有一些令人信服的理由一般使用memcpy() ?

C指向结构的双指针

我试图找出一个指向C结构的双指针,无法弄清楚出了什么问题……简单的来源如下: typedef struct { int member; } mystruct; void myfunc(mystruct **data) { (*data)->member = 1; } void main(int argc, char *argv[]) { mystruct **data; myfunc(data); printf(“member = %d\n”, (*data)->member); } 这里有一个类似的问题: 如何使用指向C中结构指针的指针? 关于如何通过双指针修改结构的成员。 解决方案是语法(*data)->member = 1; 这是有道理的。 但是在我的小应用程序中,我在执行该行时收到了seg错误。 我究竟做错了什么? 谢谢