字符串最大长度宏定义不应该包括结束符零会更自然

场景

C语言中,我们经常会处理字符串,并定义字符串的最大长度宏定义,例如,STR_MAX_LEN

那么,这个最大长度,到底应该是带\0后的长度,还是应该不带\0后的长度呢?

以前总纠结于此,而且体现在代码中也用的比较混乱,并不能一以贯之!

现在来想,如果理清楚这里面的逻辑,就会觉得结论是非常自然的。

信息的长度就是信息的长度,它是第一个先蹦出来的概念,而将此信息用C语言字符串进行处理,才涉及到补零多一个字节的问题。

在其它场合,可能并不涉及这样的问题,所以,你需要知道原始信息的最大长度多少。

另外,用STR_MAX_LEN + 1去表达C语言字符串缓冲区长度,相较于STR_MAX_LEN - 1逆运算获得字符串最大长度,前一个会更直观点,和符合自然的逻辑 😃

结论

定义字符串最大长度,原则上应该是不携带\0的长度。
如果您以C语言的字符串语义去操作这些对象,那么缓冲区长度通常需要定义为STR_MAX_LEN + 1,以足够容纳字符串结束符\0

#define NAME_STR_MAX_LEN (uint16_t)32
#define STR_BUFFER_LEN(STR_MAX_LEN) (STR_MAX_LEN + 1)
...

char szNameBuffer[STR_BUFFER_LEN(NAME_STR_MAX_LEN)];
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值