关闭

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

2227人阅读 评论(0) 收藏 举报

一、数组大小容易被忽视,如,定义 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); 来输出,字符数组才可以。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:81009次
    • 积分:936
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:3篇
    • 译文:0篇
    • 评论:4条
    最新评论