免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 11429 | 回复: 46

最近总犯低级错误 [复制链接]

论坛徽章:
0
发表于 2006-12-21 16:19 |显示全部楼层
就刚才,一段调了一下午的代码

就是因为一个很低级的错误:



  1. char buf[256];
  2. memset(  buf,  0,  265 );
  3. strcpy( buf, str ......
  4. ......
  5. memset(  buf,  0,  265 );
  6. recv ( s,  buf, 265 .....
  7. ....
复制代码

论坛徽章:
0
发表于 2006-12-21 16:20 |显示全部楼层
这个故事告诉我们定义一个宏或者是常量有多么重要....

论坛徽章:
0
发表于 2006-12-21 16:23 |显示全部楼层
友情灌水

论坛徽章:
0
发表于 2006-12-21 16:44 |显示全部楼层
可以用sizeof吗?

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2006-12-21 16:56 |显示全部楼层
原帖由 sillydog825 于 2006-12-21 16:44 发表
可以用sizeof吗?

当然可以,但是要注意sizeof求长度只对数组,传一个指针是不可求数组长度的

论坛徽章:
0
发表于 2006-12-21 17:44 |显示全部楼层
哈哈,是够弱的,2楼的老兄所言即是啊

论坛徽章:
0
发表于 2006-12-21 17:58 |显示全部楼层
这样的情况是用一个宏.而不是去 sizeof

论坛徽章:
0
发表于 2006-12-21 21:11 |显示全部楼层
对,应该用宏

如果这段内存我是从堆里面动态申请的,就没有办法用sizeof了

申请常量是非常必要的

论坛徽章:
0
发表于 2006-12-22 09:37 |显示全部楼层
>> 这样的情况是用一个宏.而不是去 sizeof

>> 对,应该用宏

至少对楼主的程序而言,用 sizeof 比定义宏要更好一些。

能不用宏的情况下就不要使用宏,这是人们的经验总结,也应该作为一条应该坚持的规则。这是因为宏有太强的“穿透力”,从它定义的地方开始到一个编译单位结束它都在起作用,由此可能会带来各种意想不到的问题。

因此,如果在楼主的程序中使用宏,应该限定宏的作用范围,这样的使用才是比较安全的:
  1. #define BUFFER_SIZE 256
  2. char buf[BUFFER_SIZE];
  3. /* ... */
  4. #undef BUFFER_SIZE
复制代码

但是,特别是当宏作为 整型常量 使用的时候,由于总能找到代替宏的实现方案,所以在程序中 永远不要使用宏来定义整型常量

在 C 语言中,定义整型常量应该使用枚举(如 enum { BUFFER_SIZE = 256 };)。

在 C++ 中,除了枚举之外,还可以定义 const 常量来使用(int const BUFFER_SIZE = 256;)。

论坛徽章:
0
发表于 2006-12-22 09:56 |显示全部楼层
没看懂楼上的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP