Tag: 结构

为什么我不能互换地分配两个具有相同内容的结构?

我正在努力学习C而且我遇到了一些奇怪的东西: struct { int i; double j; } x, y; struct { int i; double j; } z; 在这里,您可以看到我创建了两个元素相同的struct 。 为什么当我尝试分配x = z时会产生编译错误但x = y不会? 它们具有相同的内容,为什么我不能相互分配它们,无论如何? 我有什么方法可以做到这一点,所以我可以分配x = z ? 或者他们只需要是相同的struct 。 任何C大师能指出我正确的方向吗?

为什么结构中只有“char”类型的成员没有填充?

我在结构中只声明了char类型的成员。 #include struct st { char c1; char c2; char c3; char c4; char c5; }; int main() { struct st s; printf(“%zu\n”, sizeof(s)); return 0; } 输出: [ 现场演示 ] 5 那么,为什么结构中只有char类型成员没有填充?

访问结构的双指针

我正在尝试使用以下结构指针构建数据包 typedef struct address { unsigned char *mac_destn_addr; unsigned char *mac_src_addrl }address_t; typedef struct frame { address_t *eth_addr; unsigned char *payload; unsigned int *crc32; }frame_t; typedef struct eth_ctrl { unsigned char *no_of_pkt; unsigned short *delay; frame_t **eth_frame; }eth_ctrl_t; address_t *adr; frame_t *frame; eth_ctrl_t *control; void main(int argc, char *argv[]) { adr = malloc(sizeof(address_t)); frame = […]

如何检查结构是否已初始化?

我有一个表,我正在实现数据结构。 我的代码的一个重要块看起来像这样(h是数据结构,表是存储其他结构的表): (h->table[hash(key, h->size)] 当我的代码运行时,一些table [i]将被初始化,而有些则不会。 每当我在尚未初始化的表[i]上测试我的代码时,我得到一个valgrind错误,基本上我说我无法使用未初始化的数组。 我的问题是,我如何检查某个h-> table [i]是否已初始化?

用C编程,Stephen Kochan – 第11章,练习3

我正在通过Stephen Kochan编写的“Programming in C”一书来教我自己,我在指针上进行了以下练习: 编写一个名为insertEntry的函数,将新条目插入到链表中。 让过程将指向要插入的列表条目的指针(本章定义的struct entry类型)和指向列表中元素的指针作为参数,之后将插入新条目。 struct entry结构定义如下: struct entry { int x; struct entry *ptr; }; 这是我的代码: #include void insert_entry (struct entry *new_entry, struct entry *prev_entry); struct entry { int x; struct entry *ptr; }; int main (void) { struct entry n1, n2, n3, new_entry; struct entry *list_ptr = &n1; n1.x = 1; […]

为什么不读取正确的整数?

这个问题只是为了澄清为什么没有正确打印正确的输出(年份),给出以下代码。 对于未来的读者,问题是fget()函数读取一个字节,该字节应该是属于年份的字节,导致年份无法正确打印。 这是我的代码Car结构 typedef struct carType Car; struct carType { int vehicleID; char make[20]; char model[20]; int year; int mileage; double cost; Car *next; }; 写入二进制文件的代码 void writeBinFile(Car *headPointer) { char fileName[20]; //prompt user for name of textfile to print to scanf(“%s”, fileName); FILE *ftp; Car *start = headPointer->next; ftp = fopen(fileName, “wb”); char separator […]

对于struct变量s1,s2,为什么我可以初始化“s1 = {25,3.5}”,将s2指定为“s1 = s2”,但是不能使用“s1 = {59,3.14}?

在C中,如果它们属于同一类型,我们可以将一个结构变量的值赋值给另一个。根据这个,在我的下一个程序中,当两者都是相同类型的struct变量时,我可以使用s1=s2 。但为什么之后我不允许使用s1={59,3.14} ? 我知道我们不能将字符串”Test”分配给字符数组arr而不是初始化语句,因为对于字符串”Test” ,它在赋值期间分解为char*类型,因此存在类型不匹配错误。但是我的程序{59,3.14}不会分解为任何指针,是吗?为什么然后它不允许被分配给s1即使它是相同的类型,特别是因为在初始化期间允许它?什么是在s2和{59,3.14}之间有所不同,以便允许一个被分配给s1而另一个不被分配给s1 。 #include int main(void) { struct test1 { int a; float b; } s1= {25,3.5},s2= {38,9.25}; printf(“%d,%f\n”,s1.a,s1.b); s1=s2; // Successful printf(“%d,%f\n”,s1.a,s1.b); s1= {59,3.14}; //ERROR:expected expression before ‘{‘ token| printf(“%d,%f\n”,s1.a,s1.b); }

计算文本文件中单词的重复次数

扩展我之前的练习,我有一个文本文件,每行填充一个单词。 hello hi hello bonjour bonjour hello 当我从文件中读取这些单词时,我想将它们与一个struct指针数组(从文本文件创建)进行比较。 如果数组中不存在该单词,则应将该单词存储到计数为1的结构指针中。如果该单词已存在于数组中,则计数应增加1.我将结果写入新文件(那已经存在了)。 hello = 3 hi = 1 bonjour = 2 这是我的代码 #include #include struct wordfreq{ int count; char *word; }; int main(int argc, char * argv[]) { struct wordfreq *words[1000] = {NULL}; int i, j, f = 0; for(i=0; i <1000; i++) words[i] = (struct wordfreq*)malloc(sizeof(struct wordfreq)); […]

什么是C中的自引用结构?

struct LinkedList { int data; struct LinkedList *next; }; 在代码中,在struct LinkedList的定义中,有一个指向结构本身的指针。 它是如何工作的?

将包含char **数组的结构填充为成员C

…目前正在练习填充包含数组的结构(用于存储多个元素的char数组)。 我想尝试实现的方案如下: 一般任务是(存储学生信息,作为字符串的名称和学生作为列表或char **采取的课程) 学生信息首先从文件中加载!(myfile.txt) tokenize / parse学生信息并加载到struct 包含我的学生信息的文件是: myfile.txt (每行包含学生姓名和课程列表)由“:”分隔 Austin Barbra:Biology,chemistry,maths,music Romio Chandra:Mechanics,IT,Geology,music,Astronomy . . 我的main.c是: #include #include #include #define path “myfile.txt” typedef struct student_info { char *studt_name; char *cources_as_string; char **cources_as_list; }std_info ; std_info *myinfo; //a global var that will conatain student info int student_count = 0,cource_count=0; void load_file() { int i,yu,index=0; […]