1. 总结起来有以下5种方式:
#define STR_LEN 1023
(1) char str[STR_LEN + 1]="";
(2) char str[STR_LEN + 1]={'\0'};
(3) char str[STR_LEN + 1];
str[0] = '\0';
(4) char str[STR_LEN + 1];
str[0] = 0;
(5) char str[STR_LEN + 1];
memset(str, 0 ,sizeof(str));
2. 分析
第(1)(2)(5)种方式是整体清0了整个缓冲区,效率较低;
如果数组的size非常大,那么这三种方式将会造成很大的开销。
而第(3)和第(4)种方式是只将str数组的第一个元素初始化为0,效率高;
3. 结论
- 效率高,使用3、4初始化;
- 规范,建议使用5初始化(memset)
因为有过用3/4的方式初始化,导致后面字符未初始化,而是随机值,正好使用了这些值,打印出来也是乱码导致。
4. 扩展:
4.1 不使用 szName[0] = ‘0’,使用szName[0] = 0
szName[0] = '0' ; // Warning 4195
Possible confuse digit '0' or zero-terminate '\0' or letter 'O'
//混淆数字0 和 字符串结尾字符 \0 ,建议直接使用 0 即可
4.2 空字符串判断
推荐用法:
if (0 != pcUserName[0]) // 推荐:安全 可靠
错误用法:
if (0 == strlen(pcUserName))
Warning 4170 Function 'strlen' is unnecessary or duplicate
if('0' == pcUserName[0])
同上
Possible confuse digit '0' or zero-terminate '\0' or letter 'O'
今天的文章字符数组初始化为空分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9971.html