C语言字符数组初始化置零方法 linux与Windows系统实测对比
C语言 字符数组 定义 置零 初始化 Linux windows 对比
·
我们知道,定义变量的时候,良好的习惯是,需要给变量赋一个初值,否则该变量的初值将不可预测。这一规律,对于字符数组也同样适用,不良代码示例如下:
char a[8];
在定义字符数组时,一般要对该数组进行置零操作,在大量的工程实例种,我看到比较多的是以下两种:
char b[8] = "";
char c[8] = {0};
对于以上三种写法,怀着一点好奇与探索的心态在linux及windows系统上进行了小心求证:
linux系统如下
/* array init test for linux */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int i = 0;
char a[8];
char b[8] = "";
char c[8] = {0};
for(i = 0; i < 8; i++)
{
printf("a[%i] = %x\n", i, a[i]);
printf("b[%i] = %x\n", i, b[i]);
printf("c[%i] = %x\n", i, c[i]);
}
return 0;
}
打印结果
[root@localhost array]# gcc array.c -o array
[root@localhost array]# ./array
a[0] = 70
b[0] = 0
c[0] = 0
a[1] = 4d
b[1] = 0
c[1] = 0
a[2] = ffffffa4
b[2] = 0
c[2] = 0
a[3] = 26
b[3] = 0
c[3] = 0
a[4] = fffffffd
b[4] = 0
c[4] = 0
a[5] = 7f
b[5] = 0
c[5] = 0
a[6] = 0
b[6] = 0
c[6] = 0
a[7] = 0
b[7] = 0
c[7] = 0
可以发现,字符数组 a 的值随机,不可预测,而两种置零方法都发挥了效力。在不同系统平台上也是一样的吗?于是我又在windows平台上进行了求证,这里我采用自己习惯的 libwindows/cvi作为测试平台。
测试代码完全一样,但编译时,平台对于printf(“a[%i] = %x\n”, i, a[i]);报 Warning: Local ‘a’ has not been initialized.提示 数组 a 没有被初始化并且不予运行该语句,于是只好借助平台调试窗口打断点来看 a 数组值
顺带着把 b、c 数组的也看了吧
可以看到,在windows中
char b[8] = "";
这种置零方法没有达到预期的目的!
故推荐采用
char c[8] = {0};
这种置零方法来进行代码编写。
抛砖引玉,欢迎讨论。
更多推荐
已为社区贡献1条内容
所有评论(0)