数组初始化与赋值注意的问题

一、数组大小容易被忽视,如,定义 char str[10]  ;程序代码中往往对str[10]进行了赋值,所造成的结果必然是访问了非法内存,引起“断错误”

或者是提示内存错误。不过我曾经有一段代码,对str[10]进行了赋值,但是在虚拟机里运行没有出错,但是经过 arm-linux-gcc 编译后下

载到ARM板上运行时,出现 “”segmentation fault“ ,当时查错3个小时,实在悲剧,估计两种环境下对内存错误的容忍度不同吧!


二、将字符串赋值给一个数组。如果在刚定义时以这种方式赋值: char str[]="12345";是可以的。

但是,如果是: char str[5];str="1234";编译时则会出现警告:str.c: In function ‘main’:
str.c:5:3: error: incompatible types when assigning to type ‘char[10]’ from type ‘char *’
str.c:8:2: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’

运行则出现:root@linux-VirtualBox:~/test/example#./str 
1234
段错误

但是:如果数组是以形参的形式定义的,则可以在子函数里 用 str=”1234“;进行赋值。


三、比较好的赋值方式。比如: 用strcpy(str1,str2) 等函数将字符串赋值给数组。


四、整型数组不能用printf("%s\n",str); 来输出,字符数组才可以。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值