char string[10];
当写下上面的代码的时候,一定要明白它的内涵。
10意思是这个数组有10个元素,即10个内存单元。
这10个内存单元是string[0]~string[9],0到9共10个数并没有string[10],string的定义域在0到9之间的整数,10不在定义域范围之内。
string[9]这个内存单元通常被被设置为‘\0’来表达数组的结束标志,也就是这个内存单元不用来存放用户数据。
那么能用来存放用户数据的内存单元就是string[0]~string[8]共9个内存单元。
我们一开始是定义了10个内存单元,本意是希望用来存放10个用户数据,但实际上我们只能存放9个用户数据。
少了一个怎么办?很简单,只需要加上一即可。
char string[11];
这才是定义了能存放10个用户数据的数组。
经常在代码中能看到类似下面的代码
#define NUM 10;
char[NUM+1];
或者
char[MAX_PATH+1]
都是同样的道理
总结一下,如果你希望你的数组能存放N个用户数据,那么定义数组的时候就需要定义成char[N+1].