首先来看一个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小时内与您取得联系。