Tag: 结构

c在struct中定义具有不同大小的数组

我需要为两种类型的对象定义一个结构。 两者具有完全相同的数据结构并执行相同的任务(成员方法)。 唯一的区别是两种类型的数组大小不同,一种使用SIZE_A,另一种使用SIZE_B。 不需要复制结构和函数的定义。 我怎么能使用一种类型的’struct’,并初始化不同大小的数组? #define SIZE_A 100 #define SIZE_B 200 typedef struct{ int matr[SIZE_A][SIZE_A]; // for another type matr[SIZE_B] int arr[SIZE_A]; // for another type arr[SIZE_B] int size; // will be initialized to SIZE_A or SIZE_B int var1, var2; }s; void task1(s* si){ … } void task2(s* si){ …

我在海湾合作委员会误解了__attribute __((打包))吗?

我正在尝试以下,在win32上使用gcc。 #include struct st { char c; int x; } __attribute__ ((packed)); int main() { printf(“%d\n”, sizeof(struct st)); return 0; } 我希望打印的值是5,但它是8。 然而,有了以下内容,我得到了5。 #include #pragma pack(1) struct st { char c; int x; }; int main() { printf(“%d\n”, sizeof(struct st)); return 0; } 我的程序肯定有问题,但我看不清楚。 我已经阅读了gcc的手册以及有关此问题的几个问题,我仍然感到困惑。 任何提示? 同样从SO的这些问题的答案,我明白我不应该使用打包的结构进行编组 ,我可能不会使用它太多,但我仍然想了解我在这样的情况下无法看到的内容。短节目。 注意:gcc-4.9.2和gcc-4.8.4都会出现问题。

C在链接列表的开头插入元素

我用C编写了一个程序,用于按升序将结构插入到链表中。 问题是没有插入我的两个最低值(1和2)。 这是因为我目前没有工作处理程序来检查链表的第一个值是否已大于给定值。 这是我的function: struct PCB { struct PCB *Next_PCB ; int PID ; }; void insert_ordered (struct PCB *Head, struct PCB *Add) { tmp = Head; if (Head->PID == 0) { Head->PID = Add->PID; } else { if (Head->Next_PCB == NULL) { Head->Next_PCB = Add; } else { int count = 0; while (Head […]

初始化结构中的数组值

我有一个结构,里面有几个数组。 这些数组的类型为unsigned char [4]。 我可以通过调用初始化每个元素 struct->array1[0] = (unsigned char) something; … struct->array1[3] = (unsigned char) something; 只是想知道是否有办法在一行中初始化所有4个值。 解决方案:我需要创建一个初始化所有值的临时数组,然后调用memset()将值复制到struct数组。

C99结构指定的初始化程序和其他值

我知道在C99中你可以使用成员名称初始化结构的成员,如下所示: struct myStruct { int i; char c; float f; }; 以下是有效的: struct myStruct m = {.f = 10.11, .i = 5, .c = ‘a’}; 还有人说未初始化的成员将被设置为0 。 所以 struct myStruct m = {.f = 10.11, .c = ‘a’}; 在这里i将被设置为0 但是,对于以下内容: struct myStruct m = {.f = 10.11, .c = ‘a’, 6}; i仍然初始化为0.如果我们进行这样的复合初始化是什么原因。

C – 将指针数据保存/加载到文件

如果以前曾经问过这个问题,或者有一个我看不到的明显的解决方案,首先道歉。 我发现了一个类似的问题,但我相信我所要求的比前面提到的更进一步。 我的结构如下: typedef struct { int id; char *title; char *body; } journal_entry; 问:如何在不使用固定长度的情况下用C(而不是C ++)编写和加载指向内存的指针内容? 我错误地认为通过将title或body写入文件我会最终得到垃圾数据而不是实际存储的信息? 我不知道日记帐分录的title或body的大小,并且从入口到入口的大小可能会有很大差异。 我自己的阅读建议我需要取消引用指针并分别fwrite结构的每个部分。 但我不确定如何跟踪数据和结构,而不会让事情变得混乱,特别是对于较大的文件。 此外,如果这些不是我打算存储在文件中的唯一项目(例如,我可能希望稍后包含小图像,我不确定如何为了方便而订购文件结构。 另一个(可能是感知的)问题是我在加载数据时使用malloc为body / entry的字符串分配内存当我希望再次加载条目时,我怎么知道为字符串分配多少内存? 我是否需要扩展我的结构以包含int body_len和int title_len ? 非常感激地收到指导或建议。

结构元素的内存分配

嗨,我很难理解如何将内存分配给结构元素。 例如,如果我具有以下结构并且char的大小是1并且int分别是4个字节。 struct temp { char a; int b; }; 我知道结构的大小是8.因为在char之后将有3个字节的填充,并且下一个元素应该以4的倍数放置,因此大小将为8。 现在考虑以下结构。 struct temp { int a; // size is 4 double b; // size is 8 char c; // size is 4 double d; // size is 8 int e; // size is 4 }; 这是上述结构的o / pi size of node is 40 the […]

将文本文件中的输入读入c中的结构数组

我的结构定义是, typedef struct { int taxid; int geneid; char goid[20]; char evidence[4]; char qualifier[20]; char goterm[50]; char pubmed; char category[20]; } gene2go; 我有一个名为“gene2go.txt”的标签分隔文本文件。 该文件的每一行都包含taxID , geneID , goID , evidence , qualifier , goterm , pubmed和category信息。 文件的每一行都将保存在一个结构中。 当程序运行时,它会首先将输入文件的内容读入gen2go类型的数组中,我使用了一个名为readInfo的函数。 该程序还将从命令行获取以下输入参数, 输入类型(1表示taxid ,2表示geneid ,3表示goid )和搜索词 有一个名为listData的函数将文件“gene2go.txt”中与输入类型和搜索项匹配的行列表写入文件“output.txt”。 这是我的文本文件”gene2go.txt” , 3702 814629 GO:0003676 IEA – nucleic acid binding – […]

C中未命名的结构/联合有什么好处?

我发现一个代码实现为下面显示的类似演示.. struct st { int a; struct { int b; }; }; 6.58 struct/union未命名的struct/union字段 在ISO C11允许的范围内。 但它有什么好处呢? 因为无论如何我可以以相同的方式访问数据成员 int main() { struct st s; sa=11; sb=22; return 0; } 在gcc 4.5.2上编译,用 gcc -Wall demo.c -o demo 并没有错误,

是一个结构{…}; 一个类型或一个未命名的变量?

在文件范围,以下是类型声明还是未命名变量? struct student_s { char* name; int age; double height; struct student_s* next; }; 如果是类型定义,那么有什么区别: typedef struct student_s { char* name; int age; double height; struct student_s* next; }; ? (背景:请参阅我的答案将变量从全局更改为本地 – C ,我相信第一个引入了一个未命名的变量,然后由编译器对其进行优化。) 注意 :该问题已被标记为可能重复的结构成员标识符放在什么范围内? 但我相信我不是在询问有关成员范围的问题,而是询问有关声明实际创造的内容。 然而。 回答C ++中’struct’和’typedef struct’的区别? 解释我的问题。