大家好,又见面了,我是你们的朋友全栈君。
1. 总结起来有以下5种方式:
#define STR_LEN 1023
(1) char str[STR_LEN + 1]="";
(2) char str[STR_LEN + 1]={'#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));
'};
(3) char str[STR_LEN + 1];
str[0] = '#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));
';
(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 'szName[0] = '0' ; // Warning 4195
Possible confuse digit '0' or zero-terminate '\0' or letter 'O'
//混淆数字0 和 字符串结尾字符 \0 ,建议直接使用 0 即可
' or letter 'O'
//混淆数字0 和 字符串结尾字符 szName[0] = '0' ; // Warning 4195
Possible confuse digit '0' or zero-terminate '\0' or letter 'O'
//混淆数字0 和 字符串结尾字符 \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 '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'
' or letter 'O'
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161094.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...