全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解C语言中的字符串拼接(堆与栈)

首先来看一个demo:

int do_sth(int type) {
  char *errstr;
  
  switch(type) {
  case 1:
    errstr = "Error";break
  case 2:
    errstr = "Warn";break
  case 3:
    errstr = "Info";break
  case 4:
    errstr = "Debug";break
  default:
    return 0;
  }
 
  if (...) {..}
  if (...) {
    ..;
    fprintf(stdout, "%s %s", errstr, ...);
    return 1;
  }
  if (...) { return 1;}
  if (...) {
    fprintf(stderr, "%s %s", errstr, ...);
  }
  ...
  return 0;
}

问题: 如何在errstr信息前面添加一个HOSTNAME 环境变量信息?

考虑到errstr有可能写到标准错误,也有可能写到标准输出,也有可能根本就不输出,所以,提前输出HOSTNAME 信息显然不合适

考虑到引用errstr的地方确实不少,最好一开始就拼接HOSTNAME到该errstr 上面去,那么如何拼接呢?

如果是在脚本语言或者带有gc的语言中,完全可以直接在errstr变量前面拼接那个动态获取到的环境变量,如:

errstr=getenv("HOSTNAME") + errstr ;

但是c中却不能这样,为什么呢?字符串拼接的函数不是有的吗,如:strcat;

事实却并非如此简单,为什么呢?

上面的errstr变量是存储在栈上的,不需要考虑free的问题,原作者考虑到后续一大堆复杂的if分支,如果把errstr放在堆上,处处要考虑是不是该把errstr free掉,得死多少脑细胞啊!

对于HOSTNAME是个运行时的信息,显然没法放到栈上,如果非要和errstr拼接起来的话,errstr必须在堆上,即要动态的malloc,由此可见,对于脚本语言来讲,一个非常简单的逻辑,在C中却如此的麻烦

解决办法:

为了既不需要free,又能拼接字符串,可以定义一个字符数组,如: errstr[255],然后,把需要的信息加进去;为了避免信息太多而不小心越界,可以使用snprintf函数,自动丢弃超长的部分

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# c语言字符串拼接  # c语言中字符串拼接  # c语言字符串的拼接  # C语言使用深度优先搜索算法解决迷宫问题(堆栈)  # C语言中栈和队列实现表达式求值的实例  # C语言用栈和队列实现的回文检测功能示例  # C语言用栈实现十进制转换为二进制的方法示例  # C语言对栈的实现基本操作  # C语言 数据结构中栈的实现代码  # 深入浅析C语言中堆栈和队列  # C语言中栈的两种实现方法  # 考虑到  # 也有  # 什么呢  # 写到  # 中却  # 是个  # 是在  # 放在  # 太多  # 有可能  # 不需要  # 就不  # 而不  # 并非如此  # 可以直接  # 可以使用  # 又能  # 非要  # 这篇文章  # 谢谢大家 


相关文章: 制作宣传网站的软件,小红书可以宣传网站吗?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  如何选择适配移动端的WAP自助建站平台?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  如何实现建站之星域名转发设置?  如何在服务器上配置二级域名建站?  建站主机无法访问?如何排查域名与服务器问题  网站制作话术技巧,网站推广做的好怎么话术?  小建面朝正北,A点实际方位是否存在偏差?  香港服务器如何优化才能显著提升网站加载速度?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  专业商城网站制作公司有哪些,pi商城官网是哪个?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  宝塔建站后网页无法访问如何解决?  制作网站的模板软件,网站怎么建设?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  建站主机选购指南:核心配置与性价比推荐解析  官网网站制作腾讯审核要多久,联想路由器newifi官网  如何快速搭建支持数据库操作的智能建站平台?  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  C++如何编写函数模板?(泛型编程入门)  官网建站费用明细查询_企业建站套餐价格及收费标准指南  高端建站三要素:定制模板、企业官网与响应式设计优化  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  实例解析Array和String方法  c++ stringstream用法详解_c++字符串与数字转换利器  网站微信制作软件,如何制作微信链接?  潍坊网站制作公司有哪些,潍坊哪家招聘网站好?  高防服务器租用如何选择配置与防御等级?  Android使用GridView实现日历的简单功能  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  南京网站制作费用,南京远驱官方网站?  海南网站制作公司有哪些,海口网是哪家的?  如何在IIS7中新建站点?详细步骤解析  h5网站制作工具有哪些,h5页面制作工具有哪些?  b2c电商网站制作流程,b2c水平综合的电商平台?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  javascript中对象的定义、使用以及对象和原型链操作小结  如何在云主机上快速搭建网站?  *服务器网站为何频现安全漏洞?  临沂网站制作企业,临沂第三中学官方网站?  利用JavaScript实现拖拽改变元素大小  建站之星2.7模板:企业网站建设与h5定制设计专题  宝塔Windows建站如何避免显示默认IIS页面?  建站之星后台管理如何实现高效配置?  建站主机核心功能解析:服务器选择与网站搭建流程指南  如何快速选择适合个人网站的云服务器配置?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  Python路径拼接规范_跨平台处理说明【指导】  已有域名和空间如何搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。