Tag: struct

将char数组转换为struct *类型

在下面的代码中,有人可能会解释行struct ether_header *eh = (struct ether_header *) sendbuf;上发生了什么struct ether_header *eh = (struct ether_header *) sendbuf; ? 我知道它正在创建一个类型为ether_header的指针eh ,并且在RHS上,您正在将sendbuf转换为tyoe struct ether_header的指针。 但是你怎么能这样做是sendbuf是一个char array ? 你也为什么要这样做? 这是完整代码发送以太网帧的链接 #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int sockfd; struct ifreq if_idx; struct ifreq if_mac; int tx_len = 0; char sendbuf[BUF_SIZ]; struct […]

结构中的“警告:空声明中无用的存储类说明符”

typedef struct item { char *text; int count; struct item *next; }; 所以我有这个结构与上面定义的节点,但我得到下面的错误,我无法弄清楚什么是错的。 警告:空声明中无用的存储类说明符};

Objective-C检查是否定义了Structs

我的iOS应用程序可以使用可选的外部第三方库。 我想到了使用这个答案( 弱链接 – 检查一个类是否存在并使用该类 )并在执行特定于此库的代码之前检测该类是否存在。 但是,我发现这个外部库不是作为Objective-C类编写的,而是作为C STRUTS和函数编写的。 是否有类似的技术可以让我检查C Strut或函数是否存在? 或者一些更好的替代方法,看看这个库是否在运行时存在?

复制链接列表并返回指向新列表的指针

我目前的结构是: typedef char AirportCode[4]; typedef struct node{ AirportCode airport; struct node *next; }Node; 关于函数应该如何启动的想法是这样的: Node *copy(Node *list) { int count = 0; while (list != NULL){ count++; list = list->next; } } 现在我们知道原始列表有多长,但我之所以难以理解是因为我不知道如何为每个我们必须复制到第二个列表的单个节点分别分配内存。

结构填充在C结构序列化中的影响(保存到文件)

我在C中有以下结构: typedef struct sUser { char name[nameSize]; char nickname[nicknameSize]; char mail[mailSize]; char address[addressSize]; char password[passwordSize]; int totalPoints; PlacesHistory history; DynamicArray requests; }User; typedef struct sPlacesHistory { HistoryElement array[HistorySize]; int occupied; int last; }PlacesHistory; 和function: void serializeUser( User * user, FILE * fp ) { fwrite( user, nameSize + nicknameSize + mailSize + addressSize + passwordSize […]

从另一个文件调用节点

我知道在编程中,保持简单并能够改变是很重要的。 所以对我而言,这意味着使用不同的文件和function并将它们分开以便更容易隔离故障并提高可读性非常重要。 我是C的新手,我不明白该怎么做。 我有我的nodeTest.h #include #include struct nodeTest { int data; struct nodeTest* next; }; 然后我有另一个文件试图调用该结构 #include #include #include “nodeTest.h” nodeTest* first = (nodeTest*)malloc(sizeof(nodeTest)); 我收到一个错误,说nodeTest未声明(不在函数中)。 这是什么意思,为什么我不能使用include来包含struct或typedef?

如何在结构数组中获取某些struct成员的地址

我尝试在结构数组中获取某个struct成员的地址,但我不想使用该成员的名称。 它应该是这样的: typedef struct{ unsigned char MrChar; unsigned short MrShort; unsigned long MrLong; unsigned char MrArray[5]; }tModule; static tModule taModulesArray[MODULES_AMOUNT] = { // MODULES_AMOUNT = 2 {0x22, 0x3298, 0x92324583, “djsoe”}, // Module 1 {0x33, 0x1843, 0x65644113, “gskwc”}, // Module 2 }; unsigned long usGetMemberAddr(unsigned long ulModule, unsigned long ulMember){ unsigned long Address; Address = abs(taModulesArray_BaseAddress […]

将Node插入到第一位的C编程中

这是我正在编写的程序的一个function,以便更熟悉节点。 我不确定它是否正确,但实质上是检查Node是否为Null,如果是,那么它将信息添加到代码字段并将指针设置为NULL。 否则,它会创建一个新节点并将信息插入代码字段,然后指向现有的第一个节点。 我不确定如何更改指向原始第一个节点的标头指向新节点。 代码是 typedef struct node { LibraryCode location; struct node *next; } Node; void insertFirstNode(LibraryCode code, Node **listPtr) { Node *n=*listPtr; Node *first; if(n==NULL){ n=malloc(sizeof(Node)); n->location=code; n->next=NULL; } else { Node *first; first->location=code; first->next=n; } }

为什么我不能动态分配这个结构字符串的内存?

比方说,我有一个结构: typedef struct person { int id; char *name; } Person; 为什么我不能做以下事情: void function(const char *new_name) { Person *human; human->name = malloc(strlen(new_name) + 1); }

我在结构指针上调用free()correclty吗?

因此,在测试我的结构时,我使用以下方法。 你可以看到我在方法末尾的指针上调用free。 这是正确的吗? void test() { VariableVector *labelVector = initVariableVector(); VariableVector *variableVector = initVariableVector(); // do some stuff with labelVector and variableVector free(labelVector); free(variableVector); } 这是我的struct init方法的样子: Variable* initVariable(char *variableName, char *arrayOfElements, int32_t address) { Variable* initializedVariable = malloc(sizeof(Variable)); if (initializedVariable != NULL ) { initializedVariable->variableName = variableName; initializedVariable->arrayOfElements = arrayOfElements; initializedVariable->address = address; return […]