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