当前位置: 首页 > news >正文

淄博比较好的网站建设公司外链发布平台大全

淄博比较好的网站建设公司,外链发布平台大全,网站收录后怎么做排名,jsp网站开发工具文章目录 前言一、注意事项二、代码valgrind扫描总结 前言 在c语言中利用面向对象的编程方式,实现类似c中的string类。 一、注意事项 所有与string结构体相关的函数全都没有返回值。 在c中,当产生临时对象时编译器会自动的加入析构函数,销毁…

文章目录

  • 前言
  • 一、注意事项
  • 二、代码
  • valgrind扫描
  • 总结


前言

在c语言中利用面向对象的编程方式,实现类似c++中的string类。


一、注意事项

所有与string结构体相关的函数全都没有返回值。
在c++中,当产生临时对象时编译器会自动的加入析构函数,销毁临时变量;但是C语言中必须手动显示的写出析构函数,当string结构体相关函数返回临时变量时,必须降临时变量显示赋值,或者当场调用析构函数,否则非常容易造成内存泄露。索性就都没有返回值。

二、代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>/*** 若对string相关函数提供返回值则非常容易造成内存泄露,因此所有函数都不提供返回值
*/typedef struct _string
{char* ptr;int num;
} string;
void string_Ctor(string* s)
{memset(s, 0, sizeof(string));
}
void string_Dtor(string* s)
{free(s->ptr);memset(s, 0, sizeof(string));
}
void string_add(string* all, string s1, string s2)
{string sum; string_Ctor(&sum);sum.num = s1.num + s2.num;sum.ptr = (char*)malloc(sum.num + 1);memcpy(sum.ptr, s1.ptr, s1.num);memcpy(sum.ptr+s1.num, s2.ptr, s2.num);sum.ptr[sum.num] = '\0';string_Dtor(all);*all = sum;
}
void string_assign_s_p(string* str, char* ptr)
{if (str->ptr == ptr) return;string_Dtor(str);str->num = strlen(ptr);str->ptr = (char*)malloc(str->num+1);memcpy(str->ptr, ptr, strlen(ptr));str->ptr[str->num] = '\0';
}
void string_assign_s_s(string* str1, string* str2)
{if (str1 == str2) return;string_Dtor(str1);str1->num = str2->num;str1->ptr = (char*)malloc(str1->num + 1);memcpy(str1->ptr, str2->ptr, str1->num);str1->ptr[str1->num] = '\0';
}
void string_add_assign(string* str1, string* str2)
{if (str1 == str2) return;string sum; string_Ctor(&sum);string_add(&sum, *str1, *str2);string_Dtor(str1);*str1 = sum;
}int main() {string http_head, http_body, http_msg;string_Ctor(&http_head); string_Ctor(&http_body); string_Ctor(&http_msg);string_assign_s_p(&http_head, "abc""def");string_assign_s_p(&http_msg, "jskldfj;laskjdflkj");string_add_assign(&http_msg, &http_head);string_assign_s_s(&http_body, &http_msg);string_add(&http_head, http_body, http_msg);printf("%s\n", http_head.ptr);string_Dtor(&http_head); string_Dtor(&http_body); string_Dtor(&http_msg);
}

valgrind扫描

Valgrind——c/c++内存检测工具

==23054== Memcheck, a memory error detector
==23054== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==23054== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==23054== Command: ./a.out
==23054== Parent PID: 18533
==23054== 
==23054== 
==23054== HEAP SUMMARY:
==23054==     in use at exit: 0 bytes in 0 blocks
==23054==   total heap usage: 6 allocs, 6 frees, 1,149 bytes allocated
==23054== 
==23054== All heap blocks were freed -- no leaks are possible
==23054== 
==23054== For lists of detected and suppressed errors, rerun with: -s
==23054== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

总结

虽然可以利用面向对象的思想实现类似的c++中的string类,但是由于受到c语言语法的限制,不能像写c++一样写C,如析构函数必须显示写出。

http://www.tj-hxxt.cn/news/115175.html

相关文章:

  • 备案期间 需要关闭网站自己开网站怎么开
  • 西宁专业做网站公司网站建设网站定制
  • 北京东方广场seo实战优化
  • 网站建设培训bt蚂蚁
  • 深圳网站开发哪家公司好站长工具手机综合查询
  • 多用户分销系统开发seo什么意思中文意思
  • 开原铁岭网站建设百度关键词seo排名软件
  • 那个餐饮网站百度扫一扫
  • 12306网站做的好垃圾广告公司网站
  • asp 网站运行网站建设问一问公司
  • 如何建一个自己网站中级经济师考试
  • 仙桃网站制作州国网站创建
  • 在网上做批发都有哪些网站seo外链专员工作要求
  • wordpress首页不显示文章标题seo网站优化方案书
  • 自己建网站做推广无锡网站推广公司
  • 2023年北京疫情严重吗谷歌seo优化中文章
  • 县城网站怎样做经验大地资源网在线观看免费
  • 网站建设公司该怎么销售企业网络营销推广案例
  • 做网站(信科网络)企业seo服务
  • 动漫在线制作网站疫情最新数据消息地图
  • wordpress 主题 36krseo怎么优化
  • 手机如何访问电脑做的asp网站人工智能培训机构排名前十
  • 江门企业网站建设无锡百度推广开户
  • 怎样做的英文网站全球搜索引擎排名
  • 做外贸网站选美国服务器的费用线上推广的优势和好处
  • 不会做网站能做网络销售吗潍坊seo按天收费
  • java开发网站开发教程广州网站推广运营
  • 怎么在网站上做图片轮播企业网站
  • title:(网站建设)武汉网络营销推广
  • 阿里云服务器做盗版视频网站免费网站推广软件