字符数组(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++的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); }
相关文章推荐
- 关于Java字符串数组的额外注意事项
- 字符与字符串类型的注意事项(1)
- 关注C++细节——字面值初始化字符数组及字符串拷贝注意
- 函数、数组区别以及函数注意点和回调函数,以及删除字符串中出现次数最少的字符的程序
- 设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
- 关注C++细节——字面值初始化字符数组及字符串拷贝注意
- gson将字符串转化为json数组注意事项
- 常用的字符串和字符数组的转换和注意点
- Python 字符串编码中中文字符注意事项
- javaType字符数组与jdbcType字符串转换(mybatis)
- 关于JAVA数组的几点注意事项与一些低级错误
- shell脚本中字符和文件的判断及字符串入参的注意事项
- 关于本地缓存localstorage与sessionStorage 数组 (array)字符串(string) 对象(object)的存储技巧和注意事项
- 单片机—C语言char数组和字符串赋值、拷贝、附加注意事项
- java字符串截取特殊字符转义注意事项
- 关于JAVA数组的几点注意事项与一些低级错误
- 关于本地缓存localstorage与sessionStorage 数组 (array)字符串(string) 对象(object)的存储技巧和注意事项
- Java byte[]字节数组转换为String字符串的注意事项
- 关于内存及字符数组,字符串的一些注意点
- 用字符数组和字符串指针定义字符串常量时需要注意的一点