Tag: struct

如何使用char *复制结构并指向它?

我是C编程的新手,很想得到一些帮助。 我有这个结构: typedef struct house { int numOfRooms; char* houseName; }HOUSE,*pHOUSE; 我想创建一个函数来获取指向HOUSE的指针,并返回一个新指针,指向位于内存中不同位置的同一个HOUSE – 目的是能够在不改变两者的情况下更改一个指针:我将尝试更清晰: pHOUSE duplicate_house(pHOUSE house) { pHOUSE newh = (pHOUSE)calloc(1,sizeof(HOUSE)); newh = house //I get here a pointer that points on the same house.. so If I change for exmample: // newh->numOfRooms = 9 – > both will change and I don’t want […]

C fread()神奇地读取动态分配的struct成员,怎么样?

这是我为一个我正在研究的大型项目编写的测试程序。 它与使用fwrite()将struct数据写入磁盘然后使用fread()读取该数据有关。 结构的一个成员是动态分配的。 首先,这是我的代码 #include #include #include #define STRING_LEN 128 struct Person { int age; char *name; }; int main(int argc, const char *argv[]) { struct Person *person = calloc(1, sizeof(struct Person)); person->age = 22; person->name = calloc(STRING_LEN, sizeof(char)); char *name = “Name that is really, really, really, really, really, really, long.”; strncpy(person->name, name, STRING_LEN); […]

如何在ANSI C中的结构中使用枚举?

以下代码必须在main-function中使用,但我不知道它是如何使用的。 struct SomeItem { enum {MOVIE, MUSIC} itemType; union { struct Movie* movie; struct Music* music; }; }; 这个结构用在带有previous / item / next指针的动态链表中,但我不知道如何设置枚举。 或者如何初始化它。 我需要知道它在main函数中的样子。 biglist.someitem = ???; /* declaration I use */ struct Library* biglist; 更多代码,以了解我想做什么。 struct Library{ struct SomeItem* someitem; struct SomeItem* previousItem; struct SomeItem* nextItem; }; 编译器错误:C2037:’someitem’左侧指定未定义的struct / union’library’C2065:MOVIE:未声明的标识符 我仍然是ANSI C的新手,所以不要拍我好;)

关于typedef中单实例数组的一些问题

我正在使用GNU Multi-Precision(GMP)库代码使用任意长度的整数来阅读一些代码。 MP整数的类型是mpz_t如gmp.h头文件中所定义。 但是,我对这个库定义的mpz_t类型的低级定义有一些疑问。 在标题代码中: /* THIS IS FROM THE GNU MP LIBRARY gmp.h HEADER FILE */ typedef struct { /* SOME OTHER STUFF HERE */ } __mpz_struct; typedef __mpz_struct mpz_t[1]; 第一个问题: [1]是否与__mpz_struct相关联? 换句话说, typedef是将mpz_t类型定义为__mpz_struct数组,只出现一次? 第二个问题:为什么arrays? (为什么只出现一次?)这是我听说过的结构黑客之一吗? 第三个问题(可能与第二个问题间接相关): mpz_init_set(mpz_t, unsigned long int)函数的GMP文档说只使用它作为pass-by-value,尽管可以假设这个函数会修改其内容被调用的函数(因此需要pass-by-reference)语法。 参考我的代码: /* FROM MY CODE */ mpz_t fact_val; /* declaration */ mpz_init_set_ui(fact_val, 1); […]

C字典/地图

我想映射struct成员,这样我就可以消除循环中的分支。 在C中实现此function的最佳方式或约定是什么? 我想它可能是一个二维数组而不是……然后我可以将整数映射到char键? char chunk[32]; int n; int i; char *ptr = config; while (*ptr != ‘\0’) { int items_read = sscanf(ptr, “%31[^;]%n”, chunk, &n); if(chunk[0] == ‘S’ && chunk[1] == ‘P’) { for(i=0;i<GLOBAL_MEAS_CUTOFF; i++) { theMeas[i].signal_path = atoi(&chunk[2]); } } if(chunk[0] == 'T' && chunk[1] == 'L') { for(i=0;i<GLOBAL_MEAS_CUTOFF; i++) { theMeas[i].trace_length = atoi(&chunk[2]); […]

通过TCP发送结构(C编程)

我有一个客户端和服务器程序,我想从客户端发送整个结构,然后在服务器上输出结构成员“ID”。 我已完成所有连接等,并已设法通过以下方式发送字符串: send(socket, string, string_size, 0); 那么,是否可以通过send()发送结构而不是字符串? 我可以将服务器上的缓冲区替换为相同类型的空结构吗?

用三元算子初始化结构

为什么三元运算符不能用于初始化结构类型,而它可以用来初始化像int这样的基类型? 示例代码: #include #define ODD 1 int main(int argc, const char *argv[]) { static struct pair_str { int first; int second; } pair = ( ODD ) ? {1,3} : {2,4}; // ERROR printf(“pair %d %d\n”, pair.first, pair.second); int number = (ODD) ? 1 :2; // FINE return 0; } 编译器错误: /home/giuseppe/struct.c: In function ‘main’: […]

C位域内存使用情况

我需要以下面的forms处理一些数据: typedef struct{ unsigned n1 : 12; unsigned n2 : 12; unsigned n3 : 12; unsigned n4 : 1; unsigned n5 : 35; } data; 我确保它们总共可以计算9个字节。 但他们没有..将该结构的9个字节写入文件并将其读回不会恢复所有数据,而sizeof(data)返回16。 这有什么问题?

将struct作为字节数组进行访问

我目前正在重写程序以处理使用RDM协议通过串行连接接收的数据,每个数据包由UART接收并具有特定结构但长度可能不同,数据包结构示例如下,假设数据包中的字节数为n(这可能会根据数据包的内容而改变) 我想要做的是在我的C代码中定义一个结构,该结构具有定义的各种参数,但是能够从UART读取和写入结构中的字节,就像结构只是uint8_t的数组一样。 我的问题是我已经读过结构可能并不总是存储在连续的内存部分中,因此采用&RDMPacket1并通过结构递增可能最终导致数据不在正确的位置。 我的另一个问题是,如果我有一个数组来存储结构内最大可能长度(220字节)的数据包数据,那么数据包末尾的校验和将被写入错误的位置。 可以使用哪些方法来接收数据并将其放入结构中? 数据包定义示例(从标准缩短) Byte | Description 0 | START Code – Constant, can be ignored 1 | Sub-Start Code – Contains command for device to process 2 | Message Length – Points to byte number of Checksum High (up to 255) 3-8 | Destination UID – Unique ID of packet Destination 9-14 […]

realloc里面的realloc

在C中,你可以在realloc里面重新分配吗? 例如,当你需要对它们两者进行malloc并重新分配它们时,结构中的结构。 如果是,有人可以提供一个简单的例子吗? 先感谢您。