前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言 | 每日基础(40)

C语言 | 每日基础(40)

作者头像
小林C语言
发布2020-08-28 15:29:19
5230
发布2020-08-28 15:29:19
举报

读者:有个函数, 本该返回一个字符串, 但当它返回调用者的时候, 返回 串却是垃圾信息。

阿一:确保指向的内存已经正确分配了。例如, 确保你没有做下面这样的事情:

代码语言:javascript
复制
char *itoa(int n)
{ 
    char retbuf[20]; /* 错!*/ 
    sprintf(retbuf, "%d", n); 
    return retbuf; /* 错!*/ 
}

一种解决方案是把返回缓冲区声明为 static char retbuf[20]; 本方案并非完美, 尤其是有问题的函数可能会递归调用, 或者会同时使用到它 的多个返回值时。

读者:那么返回字符串或其它集合的争取方法是什么呢?

阿一:返回指针必须是静态分配的缓冲区, 或者调用者传入 的缓冲区, 或者用 malloc() 获得的内存, 但不能是局部 (自动) 数组。

读者:为什么有些代码小心地把 malloc 返回的值转换为分配的指针类型?

阿一:在 ANSI/ISO 标准 C 引入 void * 一般指针类型之前, 这种类型转换通常用于 在不兼容指针类型赋值时消除警告。在 ANSI/ISO 标准 C 下, 这些转换不再需要, 而起事实上现代的实践也不鼓励 这样做, 因为它们可能掩盖 malloc() 声明错误时产生的重要警告。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档