this->R = R; this->name = new char[strlen(Name)+1]; strcpy(this->name,Name); cout<<"Circle R:"<<this->R<<endl<<"Circle Name:"<<this->name<<endl;
时间: 2023-06-27 20:04:45 浏览: 61
这段代码是一个圆形类中的构造函数。其中,R和Name是构造函数的参数,this指针则指向当前对象本身。
第一行代码将参数R赋值给当前对象的R成员变量。
第二行代码中,使用new运算符为name成员变量分配动态内存,大小为传入的字符串长度加1(用于存储字符串结尾的'\0'字符)。
第三行代码使用strcpy函数将Name字符串复制到当前对象的name成员变量中。
最后一行代码输出圆形的半径和名称。
相关问题
void modifyBook(Book *head, char *ISBN, char *name, char *author, char *publisher, float price, int quantity) { Book *p = head->next; while (p != NULL && strcmp(p->ISBN, ISBN) != 0) { p = p->next; } if (p == NULL) { printf("未找到指定的图书信息!\n"); } else { if (strlen(name) > 0) { strcpy(p->name, name); } if (strlen(author) > 0) { strcpy(p->author, author); } if (strlen(publisher) > 0) { strcpy(p->publisher, publisher); } if (price > 0) { p->price = price; } if (quantity > 0) { p->quantity = quantity; } printf("图书信息修改成功!\n"); } }
这段代码是一个 C 语言函数,用于在链表中修改指定 ISBN 号的图书信息。它接收七个参数:一个指向链表头结点的指针 head,以及指向要修改的图书信息的 ISBN 号、书名、作者、出版社、价格和数量的指针或值。
函数的主体代码如下:
1. Book *p = head->next; // 定义一个指向链表第一个节点的指针 p
2. while (p != NULL && strcmp(p->ISBN, ISBN) != 0) { // 遍历链表,查找指定 ISBN 号的节点
3. p = p->next; // 更新 p 指针为当前节点的下一个节点
4. }
5. if (p == NULL) { // 如果遍历完整个链表都没有找到指定 ISBN 号的节点
6. printf("未找到指定的图书信息!\n");
7. } else { // 否则,找到了指定 ISBN 号的节点
8. if (strlen(name) > 0) { // 如果传入了要修改的书名
9. strcpy(p->name, name); // 将当前节点的书名修改为传入的书名
10. }
11. if (strlen(author) > 0) { // 如果传入了要修改的作者名
12. strcpy(p->author, author); // 将当前节点的作者名修改为传入的作者名
13. }
14. if (strlen(publisher) > 0) { // 如果传入了要修改的出版社名
15. strcpy(p->publisher, publisher); // 将当前节点的出版社名修改为传入的出版社名
16. }
17. if (price > 0) { // 如果传入了要修改的价格
18. p->price = price; // 将当前节点的价格修改为传入的价格
19. }
20. if (quantity > 0) { // 如果传入了要修改的数量
21. p->quantity = quantity; // 将当前节点的数量修改为传入的数量
22. }
23. printf("图书信息修改成功!\n");
24. }
在这段代码中,首先定义了一个指针变量 p,用于遍历链表。然后通过 while 循环遍历链表,直到找到指定 ISBN 号的节点或者遍历完整个链表。
如果遍历完整个链表都没有找到指定 ISBN 号的节点,函数会输出一个提示信息。否则,函数会根据传入的参数修改当前节点的图书信息,并输出一个修改成功的提示信息。
需要注意的是,该函数没有返回值,因为它直接修改了链表数据结构的内容。另外,使用该函数时需要确保传入的链表头结点的 next 指针指向链表的第一个节点,否则可能会引起错误。
unsigned int getRRs(char *q, dns_rr *rRecord){ uint32_t ipAddr; rRecord->ttl = ntohl(*(uint32_t*)(q)); //这里是ntohl,32bit数字的转化 char str[INET_ADDRSTRLEN]; struct in_addr addr; q+=sizeof(rRecord->ttl); rRecord->data_len = ntohs(*(uint16_t*)(q)); q+=sizeof(rRecord->data_len); if(rRecord->type == MX_TYPE){ q += 2; //将Preferencre的长度空出去 } if(rRecord->type == A_TYPE){ ipAddr = *(uint32_t*)(q); memcpy(&addr, &ipAddr, 4); char *ptr = inet_ntop(AF_INET, &addr, str, sizeof(str)); //转化为十进制点分值的IP地址 rRecord->rdata = (char*)malloc((strlen(ptr)+1)*sizeof(char)); strcpy(rRecord->rdata,ptr); return 4 + 2 + rRecord->data_len; } else if(rRecord->type == CNAME_TYPE){ char domainName[100]; memset(domainName, 0, 100); char *d = domainName; uint8_t count = 0; int i = 0; //完成报文中数字加域名形式至点分值的转换 while(1){ if(*q!='\0'){ count = *(uint8_t*)(q); q++; while(count){ memcpy(&(domainName[i]), q, sizeof(char)); count--; q++; i++; } domainName[i] = '.'; //加点 i++; } else{ domainName[i-1] = '\0'; //标注结束 q++; break; } } rRecord->rdata = (char*)malloc(i*sizeof(char)); memcpy(rRecord->rdata, domainName, i); //此时的i便为转换后变长字符串的长度了,经过了循环遍历 return 4 + 2 + rRecord->data_len +1; } else if(rRecord->type == MX_TYPE){ int firstlen = rRecord->data_len - 5; char domainName[100]; memset(domainName, 0, 100); char *d = domainName; //printf("d: %s\n", d); uint8_t count = 0; int i = 0; //count = ntohs(*(uint8_t*)(q)); //完成报文中数字加域名形式至点分值的转换 while(1){ if(*q!='\0'){ count = *(uint8_t*)(q); //printf("count:%d\n", count); q++; while(count){ //printf("i: %d\n", i); //printf("char1:%c\n", *q); memcpy(&(domainName[i]), q, sizeof(char)); //printf("domain name i: %c\n", domainName[i]); count--; q++; i++; } domainName[i] = '.'; //加点 i++; domainName[i] = '\0'; i++; break; } } strcpy(domainName, strcat(domainName, rRecord->name)); //由于压缩了指针,对两字符串进行拼接 //printf("Converted domain name: %s\n", domainName); int totalen = strlen(rRecord->name) + i; //拼接后总长度 rRecord->rdata = (char*)malloc(totalen*sizeof(char)); memcpy(rRecord->rdata, domainName, totalen); return 12+rRecord->data_len; } }
这段代码是一个函数,目的是从 DNS 报文中获取资源记录信息。输入参数 q 是一个指向 DNS 报文中资源记录段的指针,rRecord 是一个结构体,用于存储获取到的资源记录信息。该函数首先通过指针 q 获取资源记录的 TTL 字段,并使用 ntohl 函数将其转换为主机字节序,然后再获取数据长度字段,并使用 ntohs 函数将其转换为主机字节序。接下来,根据资源记录类型不同,分别进行不同的处理。如果是 A 记录类型,则将 IP 地址转换成十进制点分值的 IP 地址,并存储在 rRecord 结构体中,然后返回占用的字节数。如果是 CNAME 记录类型,则将域名进行数字加域名形式至点分值的转换,并存储在 rRecord 结构体中,然后返回占用的字节数。如果是 MX 记录类型,则先获取 Preference 字段的长度,然后再将域名进行转换,并将其与记录中的名称拼接起来,存储在 rRecord 结构体中,最后返回占用的字节数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)