您的位置:首页 > 其它

字符数组(C-type字符串)的几点注意事项

2009-12-01 12:46 274 查看
C中没有String类型,程序员们必须利用字符数组来自力更生。
字符数组很简单,但是却有很多微妙的陷阱。C++的String类
给我们省了不少事情,通过了解在没有String类的年代,人们是如何
处理问题的,也就懂得了String类处理问题的方式。
那个时候:
1.程序员必须确保字符数组以'/0'结尾,即:
char str[MAX];
str[MAX-1] = '/0'; //是的,这里是MAX - 1而非 MAX!
2.程序员必须确保灌入的字符不会超出字符数组的边界;
3.C-type数组的起始下标为0,带来了无数意想不到的错误。提醒自己注意这点。
4.C语言不检查数组的边界,程序员们必须担负起这一重任。
【参考代码:C&Point/第一章/不设防的数组边界】

/*
**利用C不检查数组边界,通过修改结构中第一个数组指针的值,来修改第二个数组中的内容
*/
#include <stdio.h>
#define MAX  4
struct Arrays
{
char arr1[MAX];
char arr2[MAX];
}Arrays,*pArrays;

void main(void)
{
int num = 0;
while( (num < MAX - 1) && scanf("%s",&Arrays.arr2[num]) == 1)		//给arr2赋值(不要把num < MAX-1写成num < MAX)
num+=1;
Arrays.arr2[num] = '/0';											//确保字符数组以'/0'结尾
printf("Arrays.arr2:%s/n",Arrays.arr2);

fflush(stdin);

puts("Now let me show you something really cool:");
num = 0;
while( (num < MAX -1) && scanf("%s",&Arrays.arr1[MAX + num]) == 1) //使arr1的指针指向arr2的领空并修改arr2的内容
num+=1;
Arrays.arr2[num] = '/0';
printf("Arrays.arr2:%s/n",Arrays.arr2);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐