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};

这种置零方法来进行代码编写。
抛砖引玉,欢迎讨论。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值